0

临时异常类是使用 Python 脚本中的“类型”动态定义的,旨在用作模块。当此类的实例在导入脚本中被捕获时,它无法识别该类。下面是代码片段

# the throwing module, defines dynamically
def bad_function():
    ExceptionClass = type( "FooBar", (Exception,),
        { "__init__": lambda self, msg: Exception.__init__(self, msg) })
    raise ExceptionClass("ExceptionClass")

使用代码

import libt0

try:
    libt0.bad_function()
#except libt0.FooBar as e:
#print e
except Exception as e:
    print e
    print e.__class__

可以解释为什么 libt0.FooBase 对这个脚本不可见吗?最后一行的观察者输出。

4

2 回答 2

2

您在函数内创建了类,因此它在模块的全局命名空间中不作为名称存在。事实上,它根本不存在,除了 whilebad_function正在执行。这与失败的原因相同:

# file1.py
def good_function():
   x = 2

# file2.py
import file1
print file1.x

您的异常类只是内部的一个局部变量bad_function

于 2013-06-18T07:07:35.397 回答
2

目前尚不清楚您如何期望 FooBar 不做这样的事情而存在

def bad_function():
    ExceptionClass = type( "FooBar", (Exception,),
        { "__init__": lambda self, msg: Exception.__init__(self, msg) })
    globals()['FooBar'] = ExceptionClass
    raise ExceptionClass("ExceptionClass")
于 2013-06-18T07:13:05.080 回答