파이썬 시도 ... 제외하고 쉼표 대 'as'제외


246

다음과 같은 경우를 제외하고 ','와 '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에서 둘 다 유효하면 어느 것을 사용해야합니까?

답변:


284

최종 문서는 PEP-3110 : 예외 잡기

요약:

  • 파이썬 3.x의에서 사용 as되는 필요한 변수에 예외를 할당 할 수 있습니다.
  • Python 2.6 이상에서는 Python as3.x와의 호환성이 훨씬 떨어 지므로 구문을 사용하십시오 .
  • Python 2.5 및 이전 버전에서는 as지원되지 않으므로 쉼표 버전을 사용하십시오 .

16
asPython 3.x에서 예외를 로컬에 할당하는 유일한 방법은 사용 입니다. 그러나 필요 하지 않은 경우에는 지정할 필요as 가 없으므로 필수 는 아닙니다 .
mercator

38

예, 합법입니다. 파이썬 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

여전히 작동합니다


13
2.6 이전의 Python 버전 에서는 튜플을 사용하여 여러 예외 유형도 포착 할 수있었습니다. 그러나 구문은 혼란 스러웠다. 당신이 사용하는 거라고 except NameError, ValueError:왜 '다음 궁금 ValueError예외가 잡힌되고 있지 않았다. 또는 사용 except (NameError, e):하고 NameErrorfor 'e'!
Martijn Pieters

17

"as"구문은 선호되는 구문이지만 코드가 이전 Python 버전 (2.6이 새로운 버전을 지원하는 첫 번째 버전)에서 작동해야하는 경우 쉼표 구문을 사용해야합니다.


9

모든 파이썬 버전을 지원하려면 다음 sys.exc_info()과 같은 기능을 사용할 수 있습니다 .

try:
    a = 1/'0'
except (ZeroDivisionError, TypeError):
    e = sys.exc_info()[1]
    print(e.args[0])

(출처 : http://python3porting.com/noconv.html )


2
참고 : 여기서 알아야 할 몇 가지 코너 사례가 있습니다. Py3에서는 블록 을 종료하자마자 as대상 (다른 예외 정보와 함께)이 암시 적 del으로 except저장됩니다 (이는 순환 GC가 실행될 때까지 저장된 트레이스 백에 관련된 일부 순환 참조가 메모리 해제를 지연시키는 것을 방지합니다) ). 따라서이 등가 코드는 블록 try/finally내에서 except블록을 del e종료하기 전에 수행 되도록 블록 내 를 사용하지 않는 한 약간 덜 동등 합니다 except.
ShadowRanger

0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.