python - Netaddr 返回 NameError 而不是 ImportError
问题描述
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
我在全局变量中看到了一些其他修复,但没有与此导入修复类似。找到一个更简单的方法来解决这个问题会很棒,但这种方法现在可以工作。
解决方案
def
在 Python 中,函数在语句定义之前不存在。所以如果你在定义它之前调用它,你会得到一个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:
如果您试图捕获导入错误,请执行显式操作。然后,如果您遇到不同的异常,您至少会知道它是什么。
推荐阅读
- c# - c#:忽略参数异常/使我的代码工作的方法或技巧
- java - 如何更改 Kotlin 中 RecyclerView 中每个偶数值元素的颜色?
- ruby-on-rails - Errno::EACCES: 权限被拒绝 @ rb_sysopen - /app/db/schema.rb
- php - 拉取图像时使用 docker compose 设置环境变量
- python - 从 pd 数据框 Python 创建嵌套字典
- python - Redis PUB/SUB 事件什么时候触发后忘记?
- xero-api - Xero API 访问请求 Auth 2.0 不起作用
- c# - 不能在泛型类中隐式返回类型 void?
- dax - 如何让我的 DAX 度量“计算”以考虑切片器选择?
- asp.net-core - HTTP 正文日志记录中间件性能瓶颈