如何捕获导入自定义模块中抛出的异常?
自定义模块异常在主文件捕获的可行性及修正方案
完全可行,Python支持在主文件中捕获自定义模块内抛出的异常,你当前代码未成功捕获的问题出在两处逻辑错误:
问题分析
- 你在
main.py里只是实例化了My_Error类,但没有用raise关键字抛出这个异常; - 模块内的
Fail_Func抛出的是通用Exception,而非自定义的My_Error,且你根本没调用这个会触发异常的函数。
修正后的代码示例
exceptionStuff.py
class My_Error(Exception): pass def Fail_Func(): # 抛出自定义异常,而非通用Exception raise My_Error("自定义异常触发")
main.py
from myModules.exceptionStuff import My_Error, Fail_Func try: # 调用模块内会抛出异常的函数 Fail_Func() except My_Error as e: print(f'捕获到自定义异常: {e}') # 如需捕获其他通用异常,可追加except块 except Exception as e: print(f'捕获到通用异常: {e}')
关键说明
- 只有当模块内的函数/代码通过
raise抛出异常,且主文件调用了这段代码时,异常才会传递到主文件的try-except块中; - 建议明确捕获特定异常(如
My_Error),避免使用空except,防止意外捕获其他无关异常(比如KeyboardInterrupt这类系统级异常); - 单纯实例化异常类(如
My_Error())不会触发异常流程,必须搭配raise关键字。
内容的提问来源于stack exchange,提问作者Locks
相关产品推荐
相关产品推荐

