我的代码分发的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.
为什么自定义错误消息会被打印两次?
答案 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行。 第二次(输出的最后一行),它打印了异常消息。