动态定义的类在导入模块python中不可见

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


# 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吗?观察者输出的最后一行。


拉风的咖菲猫
浏览 180回答 2
2回答

繁星coding

尚不清楚如果不执行以下操作,您如何期望FooBar存在?def bad_function():    ExceptionClass = type( "FooBar", (Exception,),        { "__init__": lambda self, msg: Exception.__init__(self, msg) })    globals()['FooBar'] = ExceptionClass    raise ExceptionClass("ExceptionClass")

狐的传说

您在函数内部创建了该类,因此该类在模块的全局命名空间中不作为名称存在。实际上,它除了在bad_function执行时根本不存在。失败的原因相同:# file1.pydef good_function():   x = 2# file2.pyimport file1print file1.x您的异常类只是内部的局部变量bad_function。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python