netaddr python模块跳过ImportError。我必须创建一个函数来使用try / finally来捕获ImportError,然后重做try / except以返回打印值。想知道是否有更简单的方法来捕获ImportError?
import json
import base64
try:
netaddr_mod()
except:
print("ImportError: pip install netaddr")
def netaddr_mod():
try:
import netaddr
finally:
import netaddr
我在全局变量中看到了其他一些修复程序,但是没有与此导入修复程序相似的内容。找到一个更简单的方法来解决这个问题,但是这种方法目前可以使用。
答案 0 :(得分:1)
在Python中,直到def
语句定义该函数后,该函数才存在。因此,如果在定义之前调用它,则会得到一个NameError
。
因此,请在您尝试调用之前在{em> 之前定义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:
。然后,如果遇到其他异常,您至少会知道它是什么。