在Python 2.7中是否可以执行以下操作:
try:
-command A-
-command B-
-command C-
except ...:
print("The exception occured during command " + failedCmd)
换句话说,是否有办法知道多行try块中的哪个语句失败,而不是将其分成3个不同的单行try块?
谢谢。
答案 0 :(得分:2)
使用sys
获取引发异常的行号:
import sys
try:
a = 1/2
b = 2/0
c = 3/-1
except Exception as e:
trace_back = sys.exc_info()[2]
print("Exception in line {}".format(trace_back.tb_lineno), e)
# Exception in line 5 division by zero
答案 1 :(得分:2)
有一种使用std::list
模块的方法来提取回溯信息:
<i class="fa fa-long-arrow-right" aria-hidden="true"></i>
哪些印刷品
traceback
看看import traceback
import sys
try:
def func():
raise TypeError:
func()
except TypeError:
e = sys.exc_info()[2]
print(traceback.extract_tb(e)[0][3])
的完整输出,因为它给出了调用堆栈中每个级别的元组列表。每个值都包含func()
,您可能需要更改使用的值。在示例中,我使用了堆栈底部的line_text(首先要调用的东西)。
答案 2 :(得分:1)
try:
failedCmd = 'A'
1/10 # -command A-
failedCmd = 'B'
1/0 # -command B-
failedCmd = 'C'
1*0 # -command C-
failedCmd = ''
except:
print("The exception occured during command " + failedCmd)
输出
The exception occured during command B
答案 3 :(得分:1)
您可以避免有多个except
子句,和同时获取行号和发生故障的函数名称,和获取有关原因的有用信息命令失败,像这样:
import traceback
try:
-command A-
-command B-
-command C-
except ...:
print("The exception occurred as shown in the traceback below:")
traceback.print_exc()