답변:
최종 문서는 PEP-3110 : 예외 잡기
요약:
as
되는 필요한 변수에 예외를 할당 할 수 있습니다.as
3.x와의 호환성이 훨씬 떨어 지므로 구문을 사용하십시오 .as
지원되지 않으므로 쉼표 버전을 사용하십시오 .예, 합법입니다. 파이썬 2.6을 사용하고 있습니다
try:
[] + 3
except Exception as x:
print "woo hoo"
>>>
woo hoo
업데이트 : as
구문 을 사용해야하는 또 다른 이유가 있습니다 . ,
다른 사람들이 지적했듯이 사용 하면 상황이 훨씬 모호해집니다. 여기에 차이점이 있습니다. Python 2.6부터는 하나의 블록 에서 여러 예외multicatch
를 잡을except
수 있습니다 . 그러한 상황에서는 말하는 것이 더 표현력이 뛰어나고 피 토닉 적입니다.
except (exception1, exception2) as e
말하기보다는
except (exception1, exception2), e
여전히 작동합니다
except NameError, ValueError:
왜 '다음 궁금 ValueError
예외가 잡힌되고 있지 않았다. 또는 사용 except (NameError, e):
하고 NameError
for 'e'
!
모든 파이썬 버전을 지원하려면 다음 sys.exc_info()
과 같은 기능을 사용할 수 있습니다 .
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
as
대상 (다른 예외 정보와 함께)이 암시 적 del
으로 except
저장됩니다 (이는 순환 GC가 실행될 때까지 저장된 트레이스 백에 관련된 일부 순환 참조가 메모리 해제를 지연시키는 것을 방지합니다) ). 따라서이 등가 코드는 블록 try/finally
내에서 except
블록을 del e
종료하기 전에 수행 되도록 블록 내 를 사용하지 않는 한 약간 덜 동등 합니다 except
.
Python 3.7부터 (다른 버전에 대해서는 확실하지 않음) '쉼표'구문은 더 이상 지원되지 않습니다.
소스 파일 exception_comma.py
:
try:
result = 1/0
except Exception, e:
print("An error occurred")
exit(1)
exit(0)
$ python --version --> Python 2.7.10
$ python exception_comma.py
An error occurred
$ python3 --version --> Python 3.7.2
$ python3 exception_comma.py
File "exception_comma.py", line 3
except Exception, e:
^
SyntaxError: invalid syntax
as
Python 3.x에서 예외를 로컬에 할당하는 유일한 방법은 사용 입니다. 그러나 필요 하지 않은 경우에는 지정할 필요as
가 없으므로 필수 는 아닙니다 .