如何在Python中忽略同文件错误类,仅导入指定合法类?
问题:如何仅导入模块中的合法类,忽略其他错误类?
问题场景
现有文件 b.py 内容如下:
class B: b = "b" class BB: bb = "d" + 1
执行导入操作时,即使只尝试导入类B,也会因为BB类的定义错误而失败:
>>> from b import B Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/xuting/work/test/class_attr_test/b.py", line 4, in <module> class BB: File "/home/xuting/work/test/class_attr_test/b.py", line 5, in BB bb = "d" + 1 TypeError: must be str, not int
请问如何实现仅导入类B,而无需关心类BB是否合法?
补充说明
我原本期望实现类似以下逻辑的代码:
try: from b import B except Exception: pass try: from b import BB except Exception: pass print(B.b) # 预期输出"b" print(BB.b) # 预期抛出异常
但由于Python在导入模块时会执行整个模块的代码并定义所有类,上述代码中print(B.b)实际会抛出 NameError: name 'B' is not defined,无法达到预期输出。
目前找到一个可行但代码风格怪异的解决方式:修改b.py,给每个类的定义单独加上try-except包裹:
try: class B0: b = 1 except Exception: pass try: class B1: b = "d" + 1 except Exception: pass try: class B2: b = 3 except Exception: pass
另外,对于@blhsing的回答,我认为其方案复杂度超出预期,因为它将b.py视为文本文件而非Python模块来处理。不过使用ast模块处理存在语法/定义错误的Python文件,确实是个值得参考的思路。
内容的提问来源于stack exchange,提问作者幽幽子的筷子
相关产品推荐
相关产品推荐

