python语法错误类型_python常见报错类型和异常处理

更新ing

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

常见的报错类型和简析:

报错类型

报错内容

错误类型判断

错误解决方式

AttributeError

属性错误:常见于试图访问一个对象没有

程序尝试访问的对象没有对应的属性,查看属性是否存在

AttributeError

AttributeError: module '×××' has no attribute '×××'

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

如果是调用的标准模块或者第三方模块,确认是否出现自定义文件或目录与其重名

AssertionError

断言错误

assert 断言语句不符合条件下时会抛出此异常

ArgumentError

sqlalchemy.exc.ArgumentError: Mapper mapped class ***->*** could not assemble any primary key columns for mapped table '***'

争议异常:sqlalchemy在寻址数据表时,没找到匹配的主键

检查主键指定是否有误,或者格式是否正确

BrokenPipeError

BrokenPipeError: [Errno 32] Broken pipe

链接断开

核实建立的链接状态,可能服务端在发送时,使用的发送对象是链接对象(socket)而不是交互对象(conn或request等)

ConnectionError

redis.exceptions.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 argument

语法错误:非默认参数跟随默认参数,此类错误出现在默认参数后面跟着其他关键参数

调整关键参数的位置,至默认参数前

SyntaxError

SyntaxError: positional argument follows keyword argument

语法错误:关键参数后面跟着位置参数,即在键值对参数后面出现了基本数据类型参数

调整形参,或者调整传递实参的顺序

SyntaxError

SyntaxError: no binding for nonlocal '****' found

语法错误:在上一层函数中未找到指定的变量

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 之后的语句,是无论被检测的代码块是否出现异常,都会执行的语句。通常可用于资源回收

ContractedBlock.gif

ExpandedBlockStart.gif

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 判断结合使用。

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

自定义异常:

在系统异常之外,自定义的异常可以协助我们铺捉到代码逻辑异常之外的业务逻辑异常。自定义异常继承自系统异常,一般情况下,自定义异常虽然能对系统异常进行重写,但一般情况下不建议,所以,一般情况下自定义异常命名不能用系统异常的名字。

ContractedBlock.gif

ExpandedBlockStart.gif

1 #-------------自定义异常---------------

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

3 def __init__(self,msg):4 super(MyException,self).__init__() #继承父类的初始化信息

5 self.msg = msg #重写自定义的信息

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

7 re_msg = '< %s >' %self.msg8 returnre_msg9

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

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值