Python回溯
在Python中,回溯是一份报告,其中包含在代码中特定点进行的函数调用,即当您遇到错误时,建议您应该向后追踪(回溯)。每当代码出现异常时,回溯将提供有关代码中出现问题的信息Python回溯包含大量信息,可以帮助您找到代码中的问题所在。这些回溯可能看起来有点令人厌烦,但是一旦您将其分解以查看它试图向您展示的内容,它们就会非常有帮助。
考虑以下示例……
# Python program to demonstrate
# traceback
mylist = [1, 2, 3]
print(mylist[10])
在这个例子中,我们试图访问列表的第 10 个元素。列表中只有 3 个元素,它会给出运行时错误。执行此程序时,您将获得以下回溯。
Traceback (most recent call last):
File "", line 2, in
print(mylist[10])
IndexError: list index out of range
此回溯错误包含有关此运行时错误发生原因的所有信息。回溯的最后一行告诉您发生了什么类型的错误以及相关信息。前面的回溯行指向发生错误的代码。在上面的示例中,最后一行表示发生了索引,前两行显示了发生异常的确切位置。现在让我们看看,如何阅读回溯..
如何读取回溯
Python回溯包含很多关于引发什么异常的有用信息。逐行浏览一些回溯将使您更好地理解它们包含的信息并帮助您充分利用它们,在本节中,我们将了解如何阅读特定的异常。
在Python中,最好从底部到顶部读取回溯。
- 绿框显示发生了什么类型的错误。
- BLUE BOX显示错误的相关信息
- 橙色框显示最近调用的回溯语句,在第一个运行时错误下方:
回溯(最近一次通话最后):
文件“”,第 1 行,在
ModuleNotFoundError: No module named 'asdf' line of each call包含文件名、行号和模块名等信息 - 红色下划线部分显示发生异常的确切行。
一些常见的回溯错误是:
- 名称错误
- 索引错误
- 键错误
- 类型错误
- 值错误
- 导入错误 /ModuleNotFound
让我们一一检查每个错误:
- NameError:当您尝试引用一些尚未在代码中定义的变量时,会发生 NameError。
例子:
number = 1 # since no numb variable is # defined it will give NameError. print(numb)
输出:
Traceback (most recent call last): File "gfg.py", line 5, in print(numb) NameError: name 'numb' is not defined
- IndexError:当引用超出范围的序列时引发 IndexError。
例子:
mylist = [1, 2, 3] # Accessing the index out # of range will raise IndexError print(mylist[10])
输出:
Traceback (most recent call last): File "gfg.py", line 5, in print(mylist[10]) IndexError: list index out of range
- KeyError:与 IndexError 类似,当您尝试访问不在映射中的键时会引发 KeyError,通常在Python dict 的情况下。将其视为 IndexError 但用于字典。
例子:
DICT ={ "a" :25, "b" :65 } # A is not mapped in dict # will raise KeyError print(DICT["A"])
输出:
Traceback (most recent call last): File "gfg.py", line 5, in print(DICT["A"]) KeyError: 'A'
- TypeError:当操作或函数应用于不适当类型的对象时引发 TypeError。此异常返回一个字符串,提供有关类型不匹配的详细信息。
例子:
c = 'b'+3 print(c)
输出:
Traceback (most recent call last): File "gfg.py", line 1, in c = 'b'+3 TypeError: must be str, not int
- ValueError:当内置操作或函数接收到具有正确类型但值无效的参数时,会引发 ValueError。
例子:
print(int('xyz'))
Traceback (most recent call last): File "gfg.py", line 1, in print(int('xyz')) ValueError: invalid literal for int() with base 10: 'xyz'
- ImportError:当导入语句出现问题时会引发 ImportError。如果找不到您尝试导入的模块,或者您尝试从模块中不存在的模块导入某些内容,您将收到此异常或其子类
ModuleNotFoundError
。例子:
import module_does_not_exist
Traceback (most recent call last): File "gfg.py", line 1, in import module_does_not_exist ModuleNotFoundError: No module named 'module_does_not_exist'