gpt4 book ai didi

python 在加载模块时捕获 NameError

转载 作者:行者123 更新时间:2023-11-28 20:26:17 25 4
gpt4 key购买 nike

我正在 try catch 无法加载模块时发生的任何异常。当前的结果是“except” block 没有被执行。

import sys 
def loadModule(module):
try:
import module
except:
print """
Cannot load %s
For this script you will need:
cx_Oracle: http://cx-oracle.sourceforge.net/
pycrypto: https://www.dlitz.net/software/pycrypto/
paramiko: http://www.lag.net/paramiko/
""" % module
sys.exit(1)

loadModule(cx_Oracle)

错误:

Traceback (most recent call last):
File "./temp_script.py", line 16, in <module>
loadModule(cx_Oracle)
NameError: name 'cx_Oracle' is not defined

最佳答案

loadModule(cx_Oracle)

你认为你传递给这个函数的是什么?到目前为止,代码中没有名为 cx_Oracle 的内容。这就是您收到 NameError 的原因。您甚至还没有进入该功能。

 import module

不能传递变量给import,它会将你输入的解释为模块的字面名称

在这种情况下,我怀疑你甚至需要一个函数。只需将 try/except 移动到模块级别并直接导入 cx_Oracle。

只是因为我很好奇,这里有一种方法可以创建可重用的异常捕获导入函数。我不确定它何时/如何有用,但它在这里:

from contextlib import contextmanager
import sys

@contextmanager
def safe_import(name):
try:
yield
except:
print 'Failed to import ' + name
sys.exit(1)

with safe_import('cuckoo'):
import cuckoo

关于python 在加载模块时捕获 NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com