Python交互式会话中如何查询指定异常所属的定义模块
在Python交互式会话中查询异常所属模块的通用方法
以下两种方案都可以直接在Python shell中执行,无需依赖外部文档或浏览器:
- 方法1:捕获异常后直接查询类的
__module__属性
这是兼容性最高的通用方案,所有Python异常类默认都自带__module__属性,会直接返回该类定义所在的模块路径。
操作代码示例:
import uuid # 替换为你自己的模块导入逻辑 from yourapp import models try: # 替换为触发异常的对应代码 models.Selection.objects.get(pk=uuid.uuid4()) except Exception as e: # 输出异常所属模块 print("异常所在模块:", e.__class__.__module__) # 输出异常的全限定名,可直接用于导入或引用 print("异常全限定名:", f"{e.__class__.__module__}.{e.__class__.__name__}")
针对你给出的Django场景,运行上述代码后拿到的DoesNotExist异常所属模块就是你定义Selection模型的模块路径,你可以直接用models.Selection.DoesNotExist的形式引用该异常做捕获,无需额外导入其他模块。如果你需要捕获通用的对象不存在异常,可以打印e.__class__.__mro__查看异常的继承链,上层通用父异常ObjectDoesNotExist所属模块为django.core.exceptions。
- 方法2:无需重复执行代码,直接读取最近抛出的异常
如果已经触发过异常、不想重复运行代码,可以直接调用Python内置的sys.last_type获取最近一次抛出的异常类:
import sys print("异常所在模块:", sys.last_type.__module__) print("异常全限定名:", f"{sys.last_type.__module__}.{sys.last_type.__name__}")
该方法在默认Python shell、IPython环境中都可以正常使用。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

