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

Gab*_*iel 2 python exception-handling exception

我的代码分发的 MWE:

main.py
../func1.py
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

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

我想为给定的 块插入自定义错误消息func1,所以我定义了:

try:
    # try something
except ValueError:
    raise ValueError('Custom error message.')
Run Code Online (Sandbox Code Playgroud)

当 aValueError出现在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.
Run Code Online (Sandbox Code Playgroud)

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

bgu*_*ach 6

异常不会引发两次。只有一种例外“悬而未决”。

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

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

>>> try:
...   raise ValueError('Custom error message.')
... except ValueError as exc:
...   print exc
... 
Custom error message.
>>> 
Run Code Online (Sandbox Code Playgroud)