python在加载模块时捕获NameError错误

32 浏览
0 Comments

python在加载模块时捕获NameError错误

我正在尝试捕获在无法加载模块时发生的任何异常。\n当前的结果是\"except\"块不会被执行。\n

import sys 
def loadModule(module):
   try: 
      import module
   except: 
      print """ 
      无法加载%s模块
      对于此脚本,您需要安装以下模块: 
         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)

\n错误:\n

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

0
0 Comments

在Python中,当加载模块时出现NameError的问题是由于以下原因导致的:在捕获异常时使用了过于泛化的代码except:,而没有指定捕获的异常类型。在这种情况下,应该捕获的异常类型是ImportError。另外,你在调用函数loadModule时,传递给函数的参数应该是字符串类型,例如loadModule('cx_Oracle'),这样就可以解决NameError的问题。如果你想动态加载模块,可以参考Dynamic loading of python modules中的方法。

0
0 Comments

当加载模块时,Python会在调用loadModule函数之前尝试查找cx_Oracle变量,造成了这个错误。

如果你想保持当前的策略,你可能真的想使用像importlib.import_module这样的东西,这样你就可以通过名称导入模块,比如import_module('cx_Oracle')

我建议改为以下方式:

try:
    import cx_Oracle
except ImportError:
    print "Can't load the Oracle module"
    dosomething()

将这段代码放在你的模块的顶层。这是处理这种情况的Pythonic方法。

0
0 Comments

当加载模块时,出现了Python捕捉NameError的问题。问题的原因是在代码中没有找到名为"cx_Oracle"的内容。因此,出现了NameError的错误。甚至还没有进入函数。

解决这个问题的方法是不能将变量传递给import语句,它会将你输入的内容解释为模块的字面名称。在这种情况下,建议将try/except语句移到模块级别,并直接导入cx_Oracle模块。

如果你好奇的话,这里是一种可以创建可重用的异常捕捉导入函数的方法。虽然我不确定它何时/如何有用,但是这里是一个示例代码:

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

希望以上内容能帮助你解决Python捕捉NameError的问题。

0