이 간단한 코드예외가
# This code will BLANK the file 'myfile'!
with open('myfile', 'w') as file:
raise Exception()
를 작성하는 것이 아니라 단지 예외를 던지는 열려있는 파일, 은 "myfile을"의 모든 데이터를 실제 쓰기 작업도 시도되지 않지만을 삭제합니다.
이렇게 말하면 위험하고 다른 언어가 그러한 상황을 어떻게 대처하는지는 분명하지 않습니다.
어떻게 예방할 수 있습니까? 예기치 않은 상황에 의해 대상 파일이 지워지지 않도록 가능한 모든 예외를 처리해야합니까? 확실히이 문제를 해결하기위한 표준 패턴이 있어야합니다. 그리고 무엇보다 : 처음에 여기서 무엇이 일어나고 있습니까?
"w"또는 "쓰기"모드가 기본적으로 파일을 먼저 자르기 때문입니다. 이것은 "open (..)"이 일어나는 시간에 이루어집니다. – SuperSaiyan
내가 쓰는 언어에 상관없이 글을 쓸 때 모든 언어가 기본적으로 파일을 잘라 버린다는 것은 틀린 말입니다. –
이 동작은 Python과 아무런 관련이 없습니다. 이것은 POSIX/Unix/Linux, OS X 및 Windows에서의'open' 시스템 호출의 정의 된 의미입니다. 파이썬에서이 동작을 변경하려면 OS 레벨에서 [Os.PHEN] (http://linux.die.net/man/2/open)을 사용하여 'O_TRUNC' 상수를 특별히 생략해야합니다. *방법*. – msw