python 在加载模块时捕获 NameError

标签 python exception module nameerror

我正在 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/

相关文章:

python - Python 3.4 中的 UnboundLocalError

python - 如何在 Keras CNN 模型中预测单个图像?

java - 故意抛出异常是一种不好的形式吗?

javascript - NodeJS计划支持导入/导出es6(es2015)模块

node.js - Nodejs cron 插件与从 crontab 运行 nodejs 脚本

python - 无法在 PIL 中的 16 位 TIF 上应用图像滤镜

python - 如何将 exe 转换回 Python 脚本

javascript - VS2008 的 onerror 处理

javascript - 如何在 NodeJS 中使用函数和对象而不需要它们