파이썬 3.x 만 지원할만큼 운이 좋으면 이것이 정말 아름다움이됩니다 :)
에서 올리다
raise from을 사용하여 예외를 연결할 수 있습니다 .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks') from e
이 경우, 발신자가 잡을 수있는 예외는 예외를 제기하는 장소의 줄 번호를 갖습니다.
Traceback (most recent call last):
File "test.py", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "test.py", line 4, in <module>
raise Exception('Smelly socks') from e
Exception: Smelly socks
맨 아래 예외에는 예외를 발생시킨 지점의 스택 추적 만 있습니다. 발신자는 여전히 예외 예외의 __cause__
속성 에 액세스하여 원래 예외를 얻을 수 있습니다 .
with_traceback
또는 with_traceback 을 사용할 수 있습니다 .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks').with_traceback(e.__traceback__)
이 양식을 사용하면 발신자가 포착 한 예외에 원래 오류가 발생한 위치의 역 추적이 있습니다.
Traceback (most recent call last):
File "test.py", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 4, in <module>
raise Exception('Smelly socks').with_traceback(e.__traceback__)
File "test.py", line 2, in <module>
1 / 0
Exception: Smelly socks
맨 아래 예외에는 잘못된 나누기를 수행 한 행과 예외를 다시 발생시키는 행이 있습니다.