确定多行尝试中哪个语句失败

时间:2019-01-20 09:41:05

标签: python python-2.7

在Python 2.7中是否可以执行以下操作:

try:
   -command A-
   -command B-
   -command C-
except ...:
   print("The exception occured during command " + failedCmd)

换句话说,是否有办法知道多行try块中的哪个语句失败,而不是将其分成3个不同的单行try块?

谢谢。

4 个答案:

答案 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()