나는 내가 할 수 있다는 것을 안다:
try:
except:
나는 또한 이것을 할 수 있다:
try:
except IDontLikeYouException:
except YouAreTooShortException:
그러나 두 가지 다른 예외 내에서 동일한 작업을 수행하고 싶다면 지금 당장 생각할 수 있는 최선은 다음과 같습니다.
try:
except IDontLikeYouException:
except YouAreBeingMeanException:
다음과 같은 작업을 수행할 수 있는 방법이 있습니까 say please
?
try:
except IDontLikeYouException, YouAreBeingMeanException:
이제 다음 구문과 일치하므로 실제로 작동하지 않습니다.
try:
except Exception, e:
따라서 두 가지 별개의 예외를 잡으려는 나의 노력은 정확히 이루어지지 않습니다.
이 작업을 수행할 수 있는 방법이 있습니까?
파이썬 문서 에서 :
예외 절은 예를 들어 괄호로 묶인 튜플로 여러 예외의 이름을 지정할 수 있습니다.
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
또는 Python 2 전용:
except (IDontLikeYouException, YouAreBeingMeanException), e:
pass
예외를 변수에서 쉼표로 구분하는 것은 Python 2.6 및 2.7에서 계속 작동하지만 이제는 더 이상 사용되지 않으며 Python 3에서는 작동하지 않습니다. 이제 를 사용해야 합니다 as
.
한 줄에 여러 예외를 잡는 방법(블록 제외)
이 작업을 수행:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error)
오류 개체를 이름에 할당하기 위해 쉼표를 사용한 이전 구문 때문에 괄호가 필요합니다. 키워드 는 as
할당에 사용됩니다. 오류 개체에는 아무 이름이나 사용할 수 있습니다. 저는 error
개인적으로 선호합니다.
모범 사례
현재 Python과 호환되는 방식으로 이를 수행하려면 예외를 쉼표로 구분하고 괄호로 묶어 예외 인스턴스를 변수 이름에 할당한 이전 구문과 구별해야 합니다. 반점.
다음은 간단한 사용법의 예입니다.
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError):
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:
print err
print err.args
sys.exit(0)
코드베이스에 쉼표 이름 할당이 표시되고 Python 2.5 이상을 사용하는 경우 업그레이드할 때 코드가 호환 가능한 상태로 유지되도록 새로운 방법으로 전환하십시오.
컨텍스트 suppress
관리자
허용되는 답변은 실제로 최소 4줄의 코드입니다.
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
, try
, 줄은 Python 3.4에서 사용할 수 있는 억제 컨텍스트 관리자를 사용except
하여 한 pass
줄로 처리할 수 있습니다 .
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
pass
따라서 특정 예외 를 원할 때 suppress
.
Python 문서 에서 -> 8.3 예외 처리 :
문 에는 try
다른 예외에 대한 처리기를 지정하기 위해 둘 이상의 except 절이 있을 수 있습니다. 최대 하나의 핸들러가 실행됩니다. 핸들러는 동일한 try 문의 다른 핸들러가 아니라 해당하는 try 절에서 발생하는 예외만 처리합니다. 예외 절은 여러 예외를 괄호로 묶인 튜플로 명명할 수 있습니다. 예를 들면 다음과 같습니다.
except (RuntimeError, TypeError, NameError):
pass
이 튜플 주위에 괄호가 필요하다는 점에 유의하십시오. 예외 ValueError, e:
는 일반적으로 except ValueError as e:
현대 Python(아래 설명)에서와 같이 작성되는 구문에 사용되었기 때문입니다. 이전 구문은 이전 버전과의 호환성을 위해 계속 지원됩니다. 이것은 당신이 원하는 것과 같지 않지만 어느 것과 except RuntimeError, TypeError
같지 않다는
것을 의미합니다.except (RuntimeError, TypeError):
except RuntimeError as
TypeError: