在函数中为异常引发自定义消息

时间:2014-11-10 20:37:07

标签: python exception exception-handling

我的代码分发的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的给定块插入自定义错误消息,所以我定义了:

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

ValueError出现func1时我得到的输出,在跳转到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.

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

4 个答案:

答案 0 :(得分:4)

异常不会引发两次。空中只有一个例外。

你所看到的是整个追溯,当你找到你的程序崩溃的原因和位置时,它是一个非凡的帮助。它逐行打印所有帧并在抛出异常的行中结束。因此,您可以“再次”阅读您的信息。

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

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

答案 1 :(得分:2)

    raise ValueError('Custom error message.')
ValueError: Custom error message.
  

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

这是Tracedback中执行的最后一个代码:

    raise ValueError('Custom error message.')

这是您在REPL上回应的实际异常:

ValueError: Custom error message.

答案 2 :(得分:1)

不是。

由于追溯,您正在看顶部打印

答案 3 :(得分:1)

第一次打印时,解释器引用引发异常的代码,即func1.py的第68行。 第二次(输出的最后一行),它打印了异常消息。