python - 查找异常前最后尝试的指令

标签 python python-3.x exception

我试图找出最后一次尝试的触发异常的指令,例如类型错误。

让我们考虑这个例子。

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/

相关文章:

python - python 中有语音到文本转换库或 api 吗?

python - 如何将N个多列表合并成一个大的多列表?

python-3.x - SWIG : fatal error: 'Python.h' file not found

java - 首先写入远程关闭的套接字不会触发异常,可以吗? java

c# - 处理 C# WebService 异常

c++ - 2 [main] hw3 10368 cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 hw3.exe.stackdump

python - 如何在 wx.Panel 背景上做 dregradê?

python - 我需要一种干净的方法来在 Python 中检查 float

python - 有没有办法减少类中大量重复的代码

Python 多处理跳过子段错误