python常见报错类型和异常处理
更新ing
常见的报错类型和简析、异常处理、其他类型的报错(异常)类型简介、⾃定义异常
常见的报错类型和简析:
报错类型报错内容错误类型判断错误解决⽅式
AttributeError属性错误:常见于试图访问⼀个对象没有程序尝试访问的对象没有对应的属性,查看属性是
否存在
AttributeError AttributeError: module '×××' has
no attribute '×××'属性错误:调⽤的模块没有指定的属性
如果是调⽤的标准模块或
者第三⽅模块,确认是否
出现⾃定义⽂件或⽬录与
其重名
AssertionError断⾔错误assert 断⾔语句不符合条件下时会抛出此异常
ArgumentError
Mapper mapped class ***->***
could not assemble any primary
key columns for mapped table '***'
争议异常:sqlalchemy在寻址数据表
时,没到匹配的主键
检查主键指定是否有误,
或者格式是否正确
BrokenPipeError BrokenPipeError: [Errno 32]
Broken pipe链接断开
核实建⽴的链接状态,可能
服务端在发送时,使⽤的
发送对象是链接对象
(socket)⽽不是交互对
象(conn或request等)
ptions.ConnectionError:
Error 10061 connecting to
localhost:6379. 由于⽬标计算机积
极拒绝,⽆法连接
链接异常:redis服务器断开。
检查redis服务端是否关
闭,重启
ConnectionResetError  ConnectionResetError: [Errno
104] Connection reset by peer链接异常:客户端请求过于频繁
ConnectionResetError ConnectionResetError: [WinError
10054] 远程主机强迫关闭了⼀个
现有的连接。
链接异常:客户端强制关闭。python3.x
中,当客户端强制关闭时,widows系统
的服务端不再收取空数据,⽽是直接报
错。linux系统会陷⼊接收空数据的死循
可⽤try……进⾏异常捕捉
和处理
ConnectionRefusedError ConnectionRefusedError: [Errno
111] Connection refused 链接异常,链接⽆法建⽴
检查服务端是否运⾏并提
供服务
ConnectionRefusedError
ConnectionRefusedError:
[WinError 10061] 由于⽬标计算机
积极拒绝,⽆法连接。
链接异常:服务器积极拒绝请求服务器端接⼊数量达到上
ImportError⽆法引⼊模块或包:常见于是路径问题或名称错误
IndentationError IndentationError:unexpected
indent缩进格式错误:意外缩进检查缩进、空格
IndentationError IndentationError:unindent does
not match any outer indentation
level
格式错误:缩进⽅式不⼀致,有的⽤空
格(数量是否⼀致),有的⽤Tab
调整对应内容的缩进,⼀
致(4空格)
IndentationError  IndentationError:expected an
indented block格式错误:出现了不应该有的额空格
IndexError IndexError:list index out of range索引错误:索引超出范围尝试访问序列时,索引超
出定义的范围
IoError 输⼊/输出异常:常见于是⽆法打开⽂件核实访问对象的路径和名
KeyError键值错误:试图访问字典⾥不存在的键
KeyboardInterrupt键盘输⼊异常
NameError名字错误:常见于使⽤⼀个还未被赋予对象的
变量
NameError
NameError: free variable ****
referenced before assignment in
enclosing scope
名字错误:⾃由变量在封闭代码块中,
调⽤前未进⾏初始化或完成指定
NameError NameError: name *** is not
defined 名字错误:使⽤前未定义
检查变量是否已经定义,
命名格式是否正确
RecursionError
RecursionError: maximum
recursion depth exceeded in
comparison
递归超过了最⼤的深度。 1000
RecursionError RecursionError: maximum
recursion depth exceeded递归超过了最⼤深度
RuntimeError RuntimeError: dictionary changed
size during iteration
运⾏期间异常:字典在遍历过程中发⽣
了变动
原则上,对于可变数据类
型,在遍历过程中,不能
直接对元素进⾏操作,否
则会导致遍历退出病报
错。可以转为对字典key
值遍历,⽽不是对其对象
直接遍历,for i in
dict1.keys()
SyntaxError SyntaxError:invalid syntax语法错误:⽆效语法
SyntaxError  SyntaxError: non-default
argument follows default
语法错误:⾮默认参数跟随默认参数,
此类错误出现在默认参数后⾯跟着其他
调整关键参数的位置,⾄
SyntaxError argument follows default
argument 此类错误出现在默认参数后⾯跟着其他
关键参数
调整关键参数的位置,⾄
默认参数前
SyntaxError SyntaxError: positional argument
follows keyword argument
语法错误:关键参数后⾯跟着位置参
数,即在键值对参数后⾯出现了基本数
据类型参数
调整形参,或者调整传递
实参的顺序
SyntaxError  SyntaxError: no binding for
nonlocal '****' found
语法错误:在上⼀层函数中未到指定
的变量linux安装redis报错
SyntaxError  SyntaxError: unexpected EOF
while parsing语法错误:语法分析过程遇到意外eof
如果程序中有eval(),
看是否对空值进⾏了处理
TypeError
TypeError: ***** missing 1
required positional argument:
“@@”
类型错误:****需要1个位置参数,但没
传⼊的数据类型与要求的
不符
TypeError
TypeError: not all arguments
converted during string formatting
类型错误:在格式化输出过程中前后%
参数不对应
查看参数数量、类型等是
否对应
TypeError TypeError: __init__() missing 1
required positional argument:
'on_delete'
类型错误:在django2.0后,定义外键和
⼀对⼀关系的时候需要加on_delete选
项,此参数为了避免两个表⾥的数据不
⼀致问题,不然会报错
on_delete常⽤值有
models.CASCADE:此值
设置,是级联删除。
models.PROTECT:此值
设置,是会报完整性错
误。
models.SET_NULL:此值
设置,会把外键设置为
null,前提是允许为null。
models.SET_DEFAULT:
此值设置,会把设置为外
键的默认值。
models.SET():此值设
置,会调⽤外⾯的值,可
以是⼀个函数。
⼀般情况下使⽤
models.CASCADE。
TypeError TypeError: 'type' object is not
subscriptable 类型错误:操作对象不⽀持下标访问
检查对象是否引⽤正确,
对象名字拼写是否正确
TypeError TypeError: 'NoneType' object is
not callable 类型错误:“nonetype”对象不可调⽤
UnboundLocalError 常见于:试图访问⼀个还未被设置的局部变量,基本上是由于另有⼀个同名的全局变量,
UnboundLocalError
UnboundLocalError: local
variable '****' referenced before
assignment
未指定造成的局部错误:局部变量在被
使⽤前未初始化或未给予相应指定。
ValueError常见于:传⼊⼀个调⽤者不期望的值,即使值
的类型是正确的
ValueError ValueError: invalid literal for int()
with base 10
ValueError ValueError: Sample larger than
population or is negative
sample所随机选取的内容数量,⼤于选
择的范围
核实带选择的范围是否能
完全包住要选择的数量
OSError
OSError: [WinError 10057] 由于
套接字没有连接并且(当使⽤⼀个
sendto 调⽤发送数据报套接字时)
没有提供地址,发送或接收数据的
请求没有被接受。
没有建⽴正确的链接,套接字引⽤出错
请求没有被接受。
OSError  OSError: [Error 48] Address in
use
链接地址异常:端⼝正在被使⽤
程序中的错误可以⼤致分为语法错误和逻辑错误两⼤类。语法错误是指,编写的程序违反了python的基本语法规则,这样的错误会在解析过程中,直接报错。逻辑错误,则是整个程序的设计错误。
异常处理:
如果错误发⽣的条件是可以预知的,最好是⽤if 条件进⾏处理,尽量不⽤异常处理。这主要是因为异常处理会严重影响程序整体的可读性。当程序发成的错误条件是不可知的,则可以通过添加异常处理机制。
执⾏异常处理的⽬的:捕捉程序整体的运⾏错误信息,按指定的⽅式进⾏处理,可以避免捕捉到的异常影响程序的整体运⾏。
程序运⾏报错的信息,可以分为异常寻址信息,异常类型和具体的异常信息,三部分内容。
基本格式:
(在python2.x中,except语句格式,“except “错误类型” ,e:”;在python3.x中,except语句格式,“except “错误类型”  as e:”)可以⽤  raise 异常类型('异常具体信息')  进⾏主动异常出发,阻断程序的进⼀步执⾏。
常见⽤法:
多分⽀处理。利⽤except 列出每⼀种可以预知的异常类型,并给出相应的处理。
利⽤ except  Exception  可以捕捉到所有类型的异常,颗粒度较⼤。
else 之后跟的语句,是没有发⽣异常的情况下执⾏的语句
filnally 之后的语句,是⽆论被检测的代码块是否出现异常,都会执⾏的语句。通常可⽤于资源回收
1# 异常处理的基本语法格式
2try:
3"""
4执⾏代码块
5"""
6
7except “错误类型”as e:# 错误类型可以是单⼀的,可以是多个,当参数是exception时,抓住所有的错误类型,统⼀处理⼀般放在最后抓剩余的未知错误类型
8
9"""
10处理对应异常的代码块,e是具体的错误信息
11"""
12else:
13"""
14当⼀切正常执⾏,⽆错误时,执⾏的代码块
15"""
16finally:
17"""
18不管整体是否出错,都会执⾏此代码块
19"""
View Code
断⾔assert简单介绍:
执⾏⽬的:断定语法应该是……类型
基本语法 assert 判断条件
返回的是布尔值,可以和if 判断结合使⽤。
其他类型的报错(异常)类型简介:
⾃定义异常:
在系统异常之外,⾃定义的异常可以协助我们铺捉到代码逻辑异常之外的业务逻辑异常。⾃定义异常继承⾃系统异常,⼀般情况下,⾃定义异常虽然能对系统异常进⾏重写,但⼀般情况下不建议,所以,⼀般情况下⾃定义异常命名不能⽤系统异常的名字。
1# -------------⾃定义异常---------------
2class MyException(BaseException):    # 继承异常的基类 BaseException
3def__init__(self,msg):
4        super(MyException,self).__init__()    # 继承⽗类的初始化信息
5        self.msg = msg          # 重写⾃定义的信息
6def__str__(self):          # 定义异常的打印格式
7        re_msg = '< %s >' % self.msg
8return re_msg
9
10raise MyException      # 主动触发异常,本质上完成两个动作,⼀、阻断程序运⾏并捕捉异常信息;⼆、打印异常信息
View Code

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。