다음과 같은 경우를 제외하고 ‘,’와 ‘as’의 차이점은 무엇입니까?
try:
pass
except Exception, exception:
pass
과:
try:
pass
except Exception as exception:
pass
두 번째 구문은 2.6에서 합법적입니까? Windows의 CPython 2.6에서 작동하지만 cygwin의 2.5 인터프리터가 유효하지 않다고 불평합니다.
2.6에서 둘 다 유효하면 어느 것을 사용해야합니까?
답변
최종 문서는 PEP-3110 : 예외 잡기
요약:
- 파이썬 3.x의에서 사용
as
되는 필요한 변수에 예외를 할당 할 수 있습니다. - Python 2.6 이상에서는 Python
as
3.x와의 호환성이 훨씬 떨어 지므로 구문을 사용하십시오 . - Python 2.5 및 이전 버전에서는
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
여전히 작동합니다
답변
“as”구문은 선호되는 구문이지만 코드가 이전 Python 버전 (2.6이 새로운 버전을 지원하는 첫 번째 버전)에서 작동해야하는 경우 쉼표 구문을 사용해야합니다.
답변
모든 파이썬 버전을 지원하려면 다음 sys.exc_info()
과 같은 기능을 사용할 수 있습니다 .
try:
a = 1/'0'
except (ZeroDivisionError, TypeError):
e = sys.exc_info()[1]
print(e.args[0])
(출처 : http://python3porting.com/noconv.html )
답변
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