Skip to main content
 首页 » 编程设计

python之为函数中的异常引发自定义消息

2025年05月04日15lyj

我的代码分发的 MWE:

main.py 
../func1.py 

我从 main.py 调用 func1.py :

data_list = [elem1, .., elemN] # Data input. 
params = [1., 2., 5.] # Some parameters. 
 
for elem in data_list: 
    try: 
        func1(elem, params) # Call function. 
    except Exception: 
        print traceback.format_exc() 

这样,如果某个元素的函数失败,主代码会继续运行并执行列表中的剩余元素。

我想为给定的 func1 block 插入自定义错误消息,因此我定义了:

try: 
    # try something 
except ValueError: 
    raise ValueError('Custom error message.') 

当 func1 中出现 ValueError 时,在跳转到 data_list 中的下一个元素之前,我得到的输出是:

Traceback (most recent call last): 
  File "/main.py", line 44, in main 
    func1(params) 
  File "/func1.py", line 68, func1 
    raise ValueError('Custom error message.') 
ValueError: Custom error message. 

为什么自定义错误消息被打印两次?

请您参考如下方法:

异常不会被抛出两次。 “悬而未决”只能有一个异常(exception)。

您看到的是整个回溯,对于找出程序崩溃的原因和位置非常有用,它逐行打印所有帧并在抛出异常的行结束。因此,您可以“再次”阅读您的消息。

如果你捕获它并打印它,你只会看到异常本身。例如

>>> try: 
...   raise ValueError('Custom error message.') 
... except ValueError as exc: 
...   print exc 
...  
Custom error message. 
>>>