Sim*_*eth 2 python exception-handling module nameerror
我正在尝试捕获无法加载模块时发生的任何异常.目前的结果是"except"块没有被执行.
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)
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "./temp_script.py", line 16, in <module>
loadModule(cx_Oracle)
NameError: name 'cx_Oracle' is not defined
Run Code Online (Sandbox Code Playgroud)
loadModule(cx_Oracle)
Run Code Online (Sandbox Code Playgroud)
你认为你传递给这个功能怎么样?cx_Oracle到目前为止,代码中没有任何名称.这就是你得到NameError的原因.你甚至没有进入这个功能.
import module
Run Code Online (Sandbox Code Playgroud)
您无法将变量传递给导入,它会将您输入的内容解释为模块的文字名称
在这种情况下,我怀疑你甚至需要一个功能.只需将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
Run Code Online (Sandbox Code Playgroud)