为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2021-03-29 21:02:17
临时异常类是在要用作模块的python脚本中使用“ type”动态定义的。当此类的实例被导入脚本时,它无法识别该类。下面是代码片段# the throwing module, defines dynamicallydef bad_function():    ExceptionClass = type( "FooBar", (Exception,),        { "__init__": lambda self, msg: Exception.__init__(self, msg) })    raise ExceptionClass("ExceptionClass")使用代码import libt0try:    libt0.bad_function()#except libt0.FooBar as e:#print eexcept Exception as e:    print e    print e.__class__可以解释为什么此脚本看不到libt0.FooBase吗?观察者输出的最后一行。
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

尚不清楚如果不执行以下操作,您如何期望FooBar存在?


def bad_function():

    ExceptionClass = type( "FooBar", (Exception,),

        { "__init__": lambda self, msg: Exception.__init__(self, msg) })

    globals()['FooBar'] = ExceptionClass

    raise ExceptionClass("ExceptionClass")


查看完整回答
反对 回复 2021-04-02
?
狐的传说

TA贡献1804条经验 获得超3个赞

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


# file1.py

def good_function():

   x = 2


# file2.py

import file1

print file1.x

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


查看完整回答
反对 回复 2021-04-02
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信