[python] 파이썬 시도 … 제외하고 쉼표 대 ‘as’제외

다음과 같은 경우를 제외하고 ‘,’와 ‘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 as3.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


답변