한 줄에 여러 예외를 잡는 방법 (블록 제외)
이 작업을 수행:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
쉼표를 사용하여 오류 객체를 이름에 할당 한 이전 구문으로 인해 괄호가 필요합니다. as
키워드는 할당에 사용됩니다. 오류 개체에 어떤 이름이든 사용할 수 있습니다 error
. 개인적으로 선호합니다 .
모범 사례
현재와 파이썬과 호환되는 방식으로이 작업을 수행하려면 Exception을 쉼표로 분리하고 괄호로 묶어 예외 인스턴스를 변수 이름으로 할당 한 이전 구문과 구별하기 위해 Exception 유형을 따라야합니다. 반점.
간단한 사용법의 예는 다음과 같습니다.
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
버그를 숨기지 않기 위해 이러한 예외 만 지정하고 있습니다.이 경우 전체 스택 추적을 기대합니다.
https://docs.python.org/tutorial/errors.html에 설명되어 있습니다.
예외를 변수에 할당 할 수 있습니다 ( e
일반적이지만 예외 처리가 길거나 IDE에서 내 선택 항목보다 더 큰 선택 항목 만 강조 표시하는 경우 더 자세한 변수를 선호 할 수 있습니다). 인스턴스에는 args 속성이 있습니다. 예를 들면 다음과 같습니다.
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
Python 3 err
에서 except
블록이 끝나면 객체가 범위를 벗어납니다 .
더 이상 사용되지 않음
쉼표로 오류를 지정하는 코드가 표시 될 수 있습니다. Python 2.5 및 이전 버전에서 사용할 수있는 유일한 형식 인이 사용법은 더 이상 사용되지 않으며 Python 3에서 코드가 이전 버전과 호환되도록하려면 구문을 업데이트하여 새 양식을 사용해야합니다.
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
코드베이스에 쉼표 이름이 할당되어 있고 Python 2.5 이상을 사용하는 경우 업그레이드 할 때 코드가 호환되도록 새로운 방식으로 전환하십시오.
suppress
컨텍스트 매니저
허용되는 답변은 실제로 최소 4 줄의 코드입니다.
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
는 try
, except
, pass
라인은 단일 라인에서 처리 할 수 있습니다 파이썬 3.4에서 사용할 억제 컨텍스트 매니저 :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
따라서 pass
특정 예외 를 원하면을 사용하십시오 suppress
.