学Python数据科学,玩游戏、学日语、搞编程一条龙。
整套学习自学教程中应用的数据都是《三國志》、《真·三國無雙》系列游戏中的内容。
当代码中引发异常时,Python 会打印回溯。Python 回溯具有丰富的信息,可以诊断和修复代码中引发异常的原因。
这个也就是经常说的报错错在哪里了。
- Python 回溯的概念
- Python Traceback
- Python中常见的回溯
- AttributeError
- ImportError
- IndexError
- KeyError
- NameError
- SyntaxError
- TypeError
- ValueError
- 回溯的记录方法
回溯是一份文字报告,其中包含在代码中特定点进行的函数调用。Tracebacks 有很多名字,包括 stack trace、stack traceback、backtrace 等等。在 Python 中使用的术语是 traceback 。
变量未定义报错的例子。
# 代码程序
def example(data):
print('the ' + data)
greet('data')
Traceback (most recent call last):
File "example.py", line 4, in <module>
greet('data')
File "example.py", line 2, in greet
print('the ' + data)
NameError: name 'data' is not defined
Python Traceback
- 蓝色框: traceback 引发的异常名称。
- 绿框: 异常名称后面是错误信息,引发异常的原因的信息。
- 橘色框: 回溯的更进一步是从下到上移动的各种函数调用的文件。
- 红色框: 这些调用的实际执行的代码。
当属性引用或分配失败时触发。
an_int = 1
an_int.attribute
Traceback (most recent call last):
File "" , line 1, in <module>
AttributeError: 'int' object has no attribute 'attribute'
a_list = (1, 2)
a_list.append(3)
Traceback (most recent call last):
File "" , line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
ImportError
import 语句在尝试加载模块时遇到问题时触发。
import pandass
Traceback (most recent call last):
File "" , line 1, in <module>
ModuleNotFoundError: No module named 'pandass'
from collections import pandass
Traceback (most recent call last):
File "" , line 1, in <module>
ImportError: cannot import name 'pandass'
IndexError
序列下标索引超出范围时触发。
a_list = ['a', 'b']
a_list[3]
Traceback (most recent call last):
File "" , line 1, in <module>
IndexError: list index out of range
KeyError
当在现有k,v对中找不到映射dict键时触发。
a_dict['b']
Traceback (most recent call last):
File "" , line 1, in <module>
KeyError: 'b'
NameError
引用了未在代码中定义的变量、模块、类、函数或其他名称时触发。
def function(person):
print(f'Hello, {persn}')
greet('World')
function(most recent call last):
File "" , line 1, in <module>
File "" , line 2, in greet
NameError: name 'persn' is not defined
SyntaxError
当解析器遇到语法错误时触发。
def function(person)
File "" , line 1
def function(person)
^
SyntaxError: invalid syntax
TypeError
当 *** 作或函数应用于不适当类型的对象时触发。
1 + '1'
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
'1' + 1
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: must be str, not int
len(1)
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: object of type 'int' has no len()
ValueError
当 *** 作或函数接收到具有正确类型但值不适当的参数时触发。
a, b, c = [1, 2]
Traceback (most recent call last):
File "" , line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)
a, b = [1, 2, 3]
Traceback (most recent call last):
File "" , line 1, in <module>
ValueError: too many values to unpack (expected 2)
回溯的记录方法
通过 logging 导入包、获取记录器调用 .exception() 该记录器来在脚本中记录回溯。
import logging
import sys
import requests
logger = logging.getLogger(__name__)
try:
response = requests.get(sys.argv[1])
except requests.exceptions.ConnectionError as e:
logger.exception()
print(-1, 'Connection Error')
else:
print(response.status_code, response.content)
终端执行
python .\test.py http://thisur.com 2> logs.log
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)