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

我在全局变量中看到了其他一些修复程序,但是没有与此导入修复程序相似的修复程序。找到一个更简单的方法来解决这个问题,但是现在这种方法可以工作了。

最佳答案

在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:。然后,如果遇到其他异常,则至少会知道它是什么。

关于python - Netaddr返回NameError而不是ImportError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54398064/

10-10 17:39