Skip to content

Instantly share code, notes, and snippets.

@sergey-miryanov
Last active November 1, 2024 04:38
Show Gist options
  • Save sergey-miryanov/6d4f14aeeb8d6ce034daa49cae80e633 to your computer and use it in GitHub Desktop.
Save sergey-miryanov/6d4f14aeeb8d6ce034daa49cae80e633 to your computer and use it in GitHub Desktop.
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