Last active
November 1, 2024 04:38
-
-
Save sergey-miryanov/6d4f14aeeb8d6ce034daa49cae80e633 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def func(): | |
raise ConnectionError | |
# 1 вариант - обрабатывает и подавляет исключение | |
try: | |
func() | |
except ConnectionError as exc: | |
print('exception: ', type(exc), exc) | |
# получите сообщение: | |
# exception: <class 'ConnectionError'> | |
# 2 вариант - обрабатывает и пробрасывает оригинальное исключение дальше | |
try: | |
func() | |
except ConnectionError as exc: | |
print(exc) | |
raise | |
# получите следующее сообщение: | |
# exception: <class 'ConnectionError'> | |
# Traceback (most recent call last): | |
# File ".\z.py", line 6, in <module> | |
# func() | |
# File ".\z.py", line 2, in func | |
# raise ConnectionError | |
# ConnectionError | |
# 3 вариант - обработать и выбросить новое исключение из обработчика | |
# это будет воспринято, как произошло новое исключение, во время обработки оригинального | |
try: | |
func() | |
except ConnectionError as exc: | |
raise RuntimeError('Failed to open database') | |
# получите сообщение: | |
# Traceback (most recent call last): | |
# File ".\z.py", line 6, in <module> | |
# func() | |
# File ".\z.py", line 2, in func | |
# raise ConnectionError | |
# ConnectionError | |
# During handling of the above exception, another exception occurred: | |
# Traceback (most recent call last): | |
# File ".\z.py", line 8, in <module> | |
# raise RuntimeError('Failed to open database')# from None | |
# RuntimeError: Failed to open database | |
# 4 вариант - обработать и выбросить исключение (например, кастомное исключение вашей библиотеки) | |
# и сохранить информацию об оригинальном исключении | |
try: | |
func() | |
except ConnectionError as exc: | |
raise RuntimeError('Failed to open database') from exc | |
# получите следующее сообщение: | |
# Traceback (most recent call last): | |
# File ".\z.py", line 6, in <module> | |
# func() | |
# File ".\z.py", line 2, in func | |
# raise ConnectionError | |
# ConnectionError | |
# The above exception was the direct cause of the following exception: | |
# Traceback (most recent call last): | |
# File ".\z.py", line 8, in <module> | |
# raise RuntimeError('Failed to open database') from exc | |
# RuntimeError: Failed to open database | |
# Заметьте разницу в сообщении об оригинальном исключении: | |
# было During handling of the above exception, another exception occurred | |
# стало The above exception was the direct cause of the following exception | |
# разница я думаю понятна | |
# 5 вариант - обработать и выбросить исключение (например, кастомное исключение вашей библиотеки) | |
# и скрыть информацию об оригинальном сообщении: | |
try: | |
func() | |
except ConnectionError as exc: | |
raise RuntimeError('Failed to open database') from None | |
# получите следующее сообщение: | |
# Traceback (most recent call last): | |
# File ".\z.py", line 8, in <module> | |
# raise RuntimeError('Failed to open database') from None | |
# RuntimeError: Failed to open database | |
# как можете видеть - оригинальное исключение скрыто |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment