У меня есть некоторый код, который схематично выглядит следующим образом:
from logging import warning
def complex_function():
# Do some stuff
raise Warning("blah")
# Do some more stuff
raise Warning("Blah again")
try:
complex_function()
except Warning as e:
warning(e)
Это приводит к:
WARNING:root:blah
Я хотел бы перехватить все предупреждения и записать их в журнал.В моем коде такие предупреждения иногда приходят из сторонних библиотек, поэтому нецелесообразно изменять предупреждения на месте для использования logging.warning
, и я также хочу сохранить информацию с предупреждением, чтобы я мог вернуть некоторую версию этой информации черезAPI.
Есть ли способ для меня, чтобы сделать что-то вроде этого, что перехватывает все предупреждения и циклы над ними?
edit
Слишком поздно, я понимаю,что в приведенном выше примере я выдвигаю предупреждения неправильно, и complex_function
должно быть чем-то длинным:
def complex_function():
# Do some stuff
warnings.warn("blah")
# Do some more stuff
warnings.warn("Blah again", UnknownWarningType)
И я думаю, что я могу поймать их с помощью warnings.catch_warnings