Недавно я заметил, что одна из моих программ выдает FutureWarning, которая после некоторого осмотра пришла из SciPy, которую я импортировал (signal_arraytools), и она была легко решена путем обновления SciPy.
Однако, это заставило меня задуматься, есть ли способ поймать FutureWarnings по их происхождению. В частности, я хотел бы передать аналогичные предупреждения, вызванные импортом, в файл журнала A, в то время как другие предупреждения перешли в файл журнала B. Я могу представить себе следующий псевдокод, который делает это, но это не будет хорошо масштабироваться или быть легко обслуживаемым.
import A # External (e.g. SciPy)
import B # Custom
foo = X
try:
Y = A(X)
except FutureWarning:
logger_A("Update external package")
try:
Z = B(Y)
except FutureWarning:
logger_B("Fix your own stuff")
Я надеюсь, что возможно что-то вроде следующего:
import A # External (e.g. SciPy)
import B # Custom
foo = X
try:
Y = A(X)
Z = B(Y)
except FutureWarning:
# Magically determine which package threw the warning and put message
# in correct log file
Я полагаю, что в трассировке Warning можно использовать имя пакета, чтобы определить, какой импорт (если есть) вызвал предупреждение, но я не уверен, возможно ли это. Поэтому вопрос заключается в том, возможно ли это или существует стандартный пакет или метод для сбора таких предупреждений.