python在加载模块时捕获NameError

2024-03-24

我试图捕获无法加载模块时发生的任何异常。 当前的结果是“ 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)

Error:

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

您无法传递变量进行导入,它会将您输入的内容解释为模块的文字名称

在这种情况下,我怀疑你是否需要一个函数。只需将 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python在加载模块时捕获NameError 的相关文章

随机推荐