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)
为什么自定义错误消息会打印两次?
异常不会引发两次。只有一种例外“悬而未决”。
您所看到的是整个回溯,对于找出程序崩溃的原因和位置非常有用,它逐行打印所有帧,并在引发异常的行结束。因此,您可以“再次”阅读您的消息。
如果您捕获并打印它,您将只会看到异常本身。例如
>>> try:
... raise ValueError('Custom error message.')
... except ValueError as exc:
... print exc
...
Custom error message.
>>>
Run Code Online (Sandbox Code Playgroud)