在异常之前找到最后尝试的指令

时间:2018-11-03 17:46:06

标签: python python-3.x exception

我试图找出哪个是最后一个尝试触发异常的指令,例如一个TypeError。

让我们考虑这个例子。

def test(value1, value2):
    print("Hello" + value1 + value2)

如果通过以下方式调用此函数:

test("World!", 5)
test(5, "World!")

在两种情况下我都会收到TypeError。但是,在第一次执行时,将尝试(并触发错误)的最后一条语句为"Hello" + value1。在第二次执行中,它将为"Hello World!" + value2。至少这是我的假设,因为Python是分别对add运算符的“调用”,所以它们是分别执行的。

该错误消息将是相同的两次。说:

...
    print("Hallo" + value1 + value2)
TypeError: must be str, not int

我能找出触发TypeError的最后执行语句是什么吗?

1 个答案:

答案 0 :(得分:3)

如果操作数在同一行上,则不能(Python追溯中没有“列”的概念)。但是您可以通过将表达式分散在多行上来解决此问题:

def test(value1, value2):
    print(("Hello" + value1 +
    value2))

(请注意添加的括号,避免在行尾使用\

现在有了test(5, "World!"),您会得到

  File "D:\module2.py", line 2, in test
    print(("Hello" + value1 +
TypeError: Can't convert 'int' object to str implicitly

通过test("World!", 5),您将获得

    test("World!", 5)
  File "D:\module2.py", line 3, in test
    value2))
TypeError: Can't convert 'int' object to str implicitly

因此,根据错误,您将获得第2行或第3行。

简单地说,简洁的异常处理鼓励您避免一次性编写复杂的表达式。要么分解计算,要么用几行代码来编写表达式。