2023年11月29日发(作者:)

python常见报错类型和异常处理

更新ing

常见的报错类型和简析、异常处理、其他类型的报错(异常)类型简介、⾃定义异常

常见的报错类型和简析:

报错类型报错内容错误类型判断错误解决⽅式

AttributeError 属性错误:常见于

试图访问⼀个对象没有

程序尝试访问的对象没有

对应的属性,查看属性是

否存在

如果是调⽤的标准模块或

者第三⽅模块,确认是否

出现⾃定义⽂件或⽬录与

其重名

assert 断⾔语句不符合条

件下时会抛出此异常

检查主键指定是否有误,争议异常:sqlalchemy在寻址数据表

或者格式是否正确时,没找到匹配的主键

核实建⽴的链接状态,可能

服务端在发送时,使⽤的

发送对象是链接对象链接断开

socket)⽽不是交互对

象(connrequest)

检查redis服务端是否关

闭,重启

链接异常:客户端请求过于频繁

AttributeError

AssertionError 断⾔错误

AttributeError: module '×××' has

no attribute '×××'

ntError:

Mapper mapped class ***->***

could not assemble any primary

key columns for mapped table '***'

BrokenPipeError: [Errno 32]

Broken pipe

tionError:

Error 10061 connecting to

localhost:6379. 由于⽬标计算机积

极拒绝,⽆法连接

ConnectionResetError: [Errno

104] Connection reset by peer

属性错误:调⽤的模块没有指定的属性

ArgumentError

BrokenPipeError

ConnectionError

ConnectionResetError

链接异常:redis服务器断开。

ConnectionResetError10054] 远程主机强迫关闭了⼀个

链接异常:客户端强制关闭。python3.x

ConnectionResetError: [WinError

中,当客户端强制关闭时,widows系统

可⽤try……进⾏异常捕捉

的服务端不再收取空数据,⽽是直接报

和处理

现有的连接。错。linux系统会陷⼊接收空数据的死循

ConnectionRefusedError: [Errno

111] Connection refused

链接异常,链接⽆法建⽴

链接异常:服务器积极拒绝请求服务器端接⼊数量达到上

检查服务端是否运⾏并提

供服务

积极拒绝,⽆法连接。

ConnectionRefusedError

ConnectionRefusedError:

ConnectionRefusedError[WinError 10061] 由于⽬标计算机

ImportError⽆法引⼊模块或包:常见于是路径问题或名称错误

IndentationErrorunexpected

indent

IndentationErrorunindent does

not match any outer indentationIndentationError

level

IndentationErrorexpected an

indented block

IndexErrorlist index out of rangeIndexError索引错误:索引超出范围

IoError 输⼊/输出异常:常见于

KeyError键值错误:

KeyboardInterrupt键盘输⼊异常

NameError

NameError: free variable ****

referenced before assignment in NameError

enclosing scope

NameError: name *** is not

defined

RecursionError: maximum

recursion depth exceeded in 1000 RecursionError 递归超过了最⼤的深度。

comparison

RecursionError: maximum

recursion depth exceeded

检查缩进、空格 缩进格式错误:意外缩进

调整对应内容的缩进,⼀

致(4空格)格(数量是否⼀致),有的⽤Tab

格式错误:出现了不应该有的额空格

尝试访问序列时,索引超

出定义的范围

核实访问对象的路径和名

检查变量是否已经定义,

命名格式是否正确

递归超过了最⼤深度

原则上,对于可变数据类

型,在遍历过程中,不能

直接对元素进⾏操作,否

则会导致遍历退出病报运⾏期间异常:字典在遍历过程中发⽣

错。 可以转为对字典key了变动

值遍历,⽽不是对其对象

直接遍历,for i in

()

SyntaxErrorSyntaxErrorinvalid syntax语法错误:⽆效语法

调整关键参数的位置,⾄

IndentationError

IndentationError

NameError

RecursionError

格式错误:缩进⽅式不⼀致,有的⽤空

是⽆法打开⽂件

试图访问字典⾥不存在的键

名字错误:常见于

使⽤⼀个还未被赋予对象的

变量

名字错误:⾃由变量在封闭代码块中,

调⽤前未进⾏初始化或完成指定

名字错误:使⽤前未定义

RuntimeError

RuntimeError: dictionary changed

size during iteration

SyntaxErrorargument follows default

SyntaxError: non-default

语法错误:⾮默认参数跟随默认参数,

此类错误出现在默认参数后⾯跟着其他

SyntaxErrorargument follows default

argument

SyntaxError: positional argument 调整形参,或者调整传递

follows keyword argument

SyntaxError: no binding for 语法错误:在上⼀层函数中未找到指定

nonlocal '****' found

SyntaxError: unexpected EOF

while parsing

TypeError: ***** missing 1

required positional argument:TypeError

“@@”

此类错误出现在默认参数后⾯跟着其他

关键参数

语法错误:关键参数后⾯跟着位置参

数,即在键值对参数后⾯出现了基本数

据类型参数

的变量

语法错误:语法分析过程遇到意外eof

调整关键参数的位置,⾄

默认参数前

实参的顺序

SyntaxError

如果程序中有eval(),

看是否对空值进⾏了处理

SyntaxError

SyntaxError

TypeError

类型错误:****需要1个位置参数,但没 传⼊的数据类型与要求的

不符

TypeError: not all arguments 类型错误:在格式化输出过程中前后% 查看参数数量、类型等是

converted during string formatting 参数不对应

否对应

on_delete常⽤值有

E:此值

设置,是级联删除。

T:此值

设置,是会报完整性错

误。

_NULL:此值

类型错误: django2.0后,定义外键和

设置,会把外键设置为

⼀对⼀关系的时候需要加on_delete

null,前提是允许为null TypeErrorrequired positional argument:

项,此参数为了避免两个表⾥的数据不

_DEFAULT'on_delete'

⼀致问题,不然会报错

此值设置,会把设置为外

键的默认值。

():此值设

置,会调⽤外⾯的值,可

以是⼀个函数。

⼀般情况下使⽤

E

类型错误:操作对象不⽀持下标访问

类型错误:“nonetype”对象不可调⽤

常见于:

试图访问⼀个还未被设置的局部变量,

基本上是由于另有⼀个同名的全局变量,

TypeError: __init__() missing 1

TypeError

TypeError

UnboundLocalError

TypeError: 'type' object is not 检查对象是否引⽤正确,

subscriptable

TypeError: 'NoneType' object is

not callable

对象名字拼写是否正确

UnboundLocalErrorvariable '****' referenced before

UnboundLocalError: local

assignment

未指定造成的局部错误:局部变量在被

使⽤前未初始化或未给予相应指定。

ValueError

ValueError

ValueError

ValueError: invalid literal for int()

with base 10

ValueError: Sample larger thansample所随机选取的内容数量,⼤于选

population or is negative

常见于:

传⼊⼀个调⽤者不期望的值,即使值

的类型是正确的

核实带选择的范围是否能

完全包住要选择的数量择的范围

OSErrorsendto 调⽤发送数据报套接字时) 没有建⽴正确的链接,套接字引⽤出错

OSError: [WinError 10057] 由于

套接字没有连接并且(当使⽤⼀个

没有提供地址,发送或接收数据的

请求没有被接受。

请求没有被接受。

OSError 链接地址异常:端⼝正在被使⽤

程序中的错误可以⼤致分为语法错误和逻辑错误两⼤类。语法错误是指,编写的程序违反了python的基本语法规则,这样的错误会在解析过

程中,直接报错。逻辑错误,则是整个程序的设计错误。

异常处理:

如果错误发⽣的条件是可以预知的,最好是⽤if 条件进⾏处理,尽量不⽤异常处理。这主要是因为异常处理会严重影响程序整体的可读性。

当程序发成的错误条件是不可知的,则可以通过添加异常处理机制。

执⾏异常处理的⽬的:捕捉程序整体的运⾏错误信息,按指定的⽅式进⾏处理,可以避免捕捉到的异常影响程序的整体运⾏。

程序运⾏报错的信息,可以分为异常寻址信息,异常类型和具体的异常信息,三部分内容。

基本格式:

(在python2.x中,except语句格式,“except “错误类型e;在python3.x中,except语句格式,“except “错误类型” as e

可以⽤ raise 异常类型('异常具体信息') 进⾏主动异常出发,阻断程序的进⼀步执⾏。

常见⽤法:

多分⽀处理。利⽤except 列出每⼀种可以预知的异常类型,并给出相应的处理。

利⽤ except Exception 可以捕捉到所有类型的异常,颗粒度较⼤。

else 之后跟的语句,是没有发⽣异常的情况下执⾏的语句

filnally 之后的语句,是⽆论被检测的代码块是否出现异常,都会执⾏的语句。通常可⽤于资源回收

OSError: [Error 48] Address in

use

1 # 异常处理的基本语法格式

2 try:

3 """

4 执⾏代码块

5 """

6

7 except错误类型”as e # 错误类型可以是单⼀的,可以是多个,当参数是exception时,抓住所有的错误类型,统⼀处理⼀般放在最后抓剩余的未知错误类型

8

9 """

10 处理对应异常的代码块,e是具体的错误信息

11 """

12 else:

13 """

14 当⼀切正常执⾏,⽆错误时,执⾏的代码块

15 """

16 finally:

17 """

18 不管整体是否出错,都会执⾏此代码块

19 """

View Code

断⾔assert简单介绍:

执⾏⽬的:断定语法应该是……类型

基本语法 assert 判断条件

返回的是布尔值,可以和if 判断结合使⽤。

其他类型的报错(异常)类型简介:

⾃定义异常:

在系统异常之外,⾃定义的异常可以协助我们铺捉到代码逻辑异常之外的业务逻辑异常。⾃定义异常继承⾃系统异常,⼀般情况下,⾃定义

异常虽然能对系统异常进⾏重写,但⼀般情况下不建议,所以,⼀般情况下⾃定义异常命名不能⽤系统异常的名字。

1 # -------------⾃定义异常---------------

2 class MyException(BaseException): # 继承异常的基类 BaseException

3 def __init__(self,msg):

4 super(MyException,self).__init__() # 继承⽗类的初始化信息

5 = msg # 重写⾃定义的信息

6 def __str__(self): # 定义异常的打印格式

7 re_msg = '< %s >' %

8 return re_msg

9

10 raise MyException # 主动触发异常,本质上完成两个动作,⼀、阻断程序运⾏并捕捉异常信息;⼆、打印异常信息

View Code