我试图找出哪个是最后一个尝试触发异常的指令,例如一个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的最后执行语句是什么吗?
答案 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行。
简单地说,简洁的异常处理鼓励您避免一次性编写复杂的表达式。要么分解计算,要么用几行代码来编写表达式。