转载 https://blog.csdn.net/aoyaju4259/article/details/101919053
更新ing
常见的报错类型和简析、异常处理、其他类型的报错(异常)类型简介、自定义异常
常见的报错类型和简析:
报错类型报错内容错误类型判断错误解决方式AttributeError 属性错误:常见于试图访问一个对象没有程序尝试访问的对象没有对应的属性,查看属性是否存在AttributeErrorAttributeError: module '×××' has no attribute '×××'属性错误:调用的模块没有指定的属性如果是调用的标准模块或者第三方模块,确认是否出现自定义文件或目录与其重名 AssertionError 断言错误assert 断言语句不符合条件下时会抛出此异常ArgumentErrorsqlalchemy.exc.ArgumentError: Mapper mapped class ***->*** could not assemble any primary key columns for mapped table '***'争议异常:sqlalchemy在寻址数据表时,没找到匹配的主键检查主键指定是否有误,或者格式是否正确 BrokenPipeErrorBrokenPipeError: [Errno 32] Broken pipe链接断开核实建立的链接状态,可能服务端在发送时,使用的发送对象是链接对象(socket)而不是交互对象(conn或request等) ConnectionErrorredis.exceptions.ConnectionError: Error 10061 connecting to localhost:6379. 由于目标计算机积极拒绝,无法连接链接异常:redis服务器断开。检查redis服务端是否关闭,重启 ConnectionResetError ConnectionResetError: [Errno 104] Connection reset by peer链接异常:客户端请求过于频繁 ConnectionResetErrorConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。 链接异常:客户端强制关闭。python3.x中,当客户端强制关闭时,widows系统的服务端不再收取空数据,而是直接报错。linux系统会陷入接收空数据的死循环可用try……进行异常捕捉和处理 ConnectionRefusedErrorConnectionRefusedError: [Errno 111] Connection refused 链接异常,链接无法建立检查服务端是否运行并提供服务 ConnectionRefusedErrorConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。链接异常:服务器积极拒绝请求服务器端接入数量达到上限 ImportError 无法引入模块或包:常见于是路径问题或名称错误 IndentationErrorIndentationError:unexpected indent缩进格式错误:意外缩进 检查缩进、空格 IndentationErrorIndentationError: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 之后的语句,是无论被检测的代码块是否出现异常,都会执行的语句。通常可用于资源回收 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 self.msg = msg # 重写自定义的信息 6 def __str__(self): # 定义异常的打印格式 7 re_msg = '< %s >' % self.msg 8 return re_msg 9 10 raise MyException # 主动触发异常,本质上完成两个动作,一、阻断程序运行并捕捉异常信息;二、打印异常信息 View Code
转载于:https://www.cnblogs.com/shengjie1/p/10775168.html