2011-03-05 2 views
11

이것은 계속 질문입니다. Catching an exception while using a Python 'with' statement입니다.
저는 아주 초보자입니다. GNU/linux에서 다음 코드를 Python 3.2로 테스트했습니다. 상기 질문에서 파이썬 'with'문을 사용하는 동안 예외 잡기 - 파트 2

,이 비슷한 성명 '과'에서 예외를 잡기 위해 제안되었다 : 내게한다

try: 
    with open('foo.txt', 'a'): 
     # 
     # some_code 
     # 
except IOError: 
    print('error') 

를 궁금해 : some_code 그것을 잡는하지 않고 IO 오류를 제기하면 어떻게됩니까 ? 그것은 분명히 바깥의 'except'문에 걸렸지 만, 그것은 내가 정말로 원했던 것이 될 수 없다.
당신은 ok라고 말할 수 있습니다. some_code를 다른 try-except와 함께 랩핑하면됩니다.하지만 예외가 모든 곳에서 올 수 있으며 코드의 모든 부분을 보호하는 것은 불가능하다는 것을 알고 있습니다.
요약하자면, open ('foo.txt', 'a')이 예외를 발생시키는 경우에만 'error'를 출력하고 싶습니다. 그래서 다음 코드가 표준이 아닌 이유를 묻습니다. 이렇게하는 방법 :

try: 
    f = open('foo.txt', 'a') 
except IOError: 
    print('error') 

with f: 
    # 
    # some_code 
    # 

#EDIT: 'else' statement is missing, see Pythoni's answer 

고마워요!

답변

13
try: 
    f = open('foo.txt', 'a') 
except IOError: 
    print('error') 
else: 
    with f: 
     # 
     # some_code 
     # 
+1

당신은 완벽하게 맞습니다. 나는 'else'아래에 'with'를 놓는 것을 잊었습니다. – kynikos

+0

어쨌든 나의 주요 질문은 나의 추측이 맞을 때였다 : 다른 오래된 질문에 주어진 답은이 방법보다 더 나빴습니까? – kynikos

+0

그래,이게이 예외를 처리하는 가장 좋은 방법 인 것 같아서 이것이 내 대답이다. 어쩌면이 질문을 다른 질문에도 복사 할 수 있습니다. http://stackoverflow.com/questions/713794/catching-an-exception-while-using-a-python-with-statement – kynikos