You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,提问作者幽幽子的筷子

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:37:40