В Python функция не существует, пока ее не определит оператор def
.Поэтому, если вы позвоните ему раньше его определения, вы получите NameError
.
Итак, определите netaddr_mod()
перед тем, как попытаться вызвать его.В противном случае строка 4 вашего кода повысит NameError
.Сообщение говорит , что это ImportError
, но ваш код на самом деле не проверяет, что является исключением.Если вы измените код следующим образом:
try:
netaddr_mod()
except:
print("ImportError: pip install netaddr")
raise
Вы получите
ImportError: pip install netaddr
Traceback (most recent call last):
File "<pyshell#50>", line 2, in <module>
netaddr_mod()
NameError: name 'netaddr_mod' is not defined
Здесь вы увидите сообщение о том, что вы думаете ImportError
, и следговорит вам, что на самом деле является исключением.
Мораль: Не используйте голые исключения, потому что они маскируют или искажают другие проблемы с кодом.Сделайте явное except ImportError:
, если вы пытаетесь перехватить ошибки импорта.Тогда, если вы получите другое исключение, вы хотя бы узнаете, что это такое.