2013-07-13 2 views
0

임시 텍스트 파일을 만들고 사용자가 창을 닫은 후 삭제하는 스크립트가 있습니다.파이썬 오류 예외

임시 텍스트 파일은 사용자가 수행하는 작업에 따라 생성되거나 생성되지 않을 수 있습니다. 또는 사용자가 종료하기 전에 임시 텍스트 파일이 삭제 될 수 있습니다. 가능한 시나리오는 세 가지입니다.

  1. 임시 텍스트 파일은 'tempfilename'이름으로 생성됩니다. 파일을 제거하려고 할 때
  2. 임시 텍스트 파일 'tempfilename'의 이름으로 작성하지만 사용자 exit.So 전에 삭제, 그것은 OSError
  3. 임시 텍스트 파일이 생성되지 않습니다 높이고 더 변수는 'tempfilename 호출되지 '내가이 코드를 사용하여 시도했다 NameError

올릴 수 있도록 만들어집니다 :

try: 
    os.remove(str(tempfilename)) 
except OSError or NameError: 
    pass 

을하지만 그것은 단지에만 OSError를 잡을 것으로 보인다. 내가 뭐 잘못 했어요?

+1

을 숨기고 피하기 위해 좁은 KEP해야 하는가? 변수 이름에 오자가있는 경우에만 발생하는 것입니다. – delnan

+0

@delnan :'tempfilename'이 생성되지 않을 수도있는 질문을 읽습니다. (아마'if' 문에서 생성됩니다.)'tempfilename = None'을 시작 부분에 추가 한 다음 변경하면 'if tempfilename :',하지만 그건 내 코드가 아니야 –

+0

@delnan 사용자가 exit 버튼을 클릭 할 때마다 위의 코드가 실행된다. 그리고 파일 이름 변수 'tempfilename'은 사용자가 특정 작업을 수행 할 때 생성된다. 무엇이든 그래서 변수 이름 'tempfilename'도 만들어지지 않습니다. 그 경우에는'NameError'를 제공합니다. 나는 올바른 방법을 사용하고 있는지 확실하지 않으므로 초보자입니다. 그러나 어떤 것이 든 작동합니다. : D –

답변

3
try: 
    os.remove(str(tempfilename)) 
except (OSError, NameError): 
    pass 
+0

is 그 사모 예드 강아지? – Stephan

+0

예. :) 그리고 당신은 큰 사람입니다. @ Stephan – zhangyangyu

0
tempfilename = None 

# ... 

if tempfilename is not None and os.path.exists(tempfilename): 
    os.remove(tempfilename) 

그것은 코드에서 다른 오타를 숨길 때문에 NameError을 잡기 위해 좋지 않다 (예를 들어, os.remov(…)).

또한 OSError이 파일이 존재하지 않는다는 것을 의미하지는 않습니다. Windows에서 파일이 사용 중이면 예외가 발생합니다 (http://docs.python.org/2/library/os.html#os.remove). 이 경우 예외를 확인하여 문제를 인식하고 /하거나 다른 방식으로 처리 할 수 ​​있습니다.

예외 핸들러는 가능한 한 당신이`NameError`을 사로 잡고있다 왜 관련이없는 오류 또는 버그