我试图找出最后一次尝试的触发异常的指令,例如类型错误。
让我们考虑这个例子。
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 的最后执行的语句是什么吗?
最佳答案
如果操作数位于同一行,则不能(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 行。
隐含地,简洁的异常处理鼓励您避免一次性编写复杂的表达式。要么分解计算,要么用几行写表达式。
关于python - 查找异常前最后尝试的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133942/