常见异常类型
AttributeError
AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
出现这个异常,一种情况是调用了错误的方法,根据异常提示也可以看出, a 是一个整型变量,但
append 是列表类型的一个方法,所以对一个整型变量使用列表的方法自然会出现问题。
解决方式就是检查报错处的内容,根据报错信息看看有没有出现调用方法的问题。
NameError
NameError :试图访问的变量名不存在
当我尝试访问一个没有定义过的变量的时候,程序就会抛出这个异常。
解决方法也很简单,就是在使用之前现给它初始化一下。
SyntaxError:语法错误,代码形式错误
进行条件判断的时候使用'='而不是'=='会导致语法错误。
当使用if、while、for、class、def但末尾没有加冒号,或使用中文符号时,也会抛出该异常。
字符串少一般引号,函数调用少一半括号等等,均会抛出异常。
这种异常通常会明确指出异常位置,找到相应错误进行修改就可以了。
KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
由于字典a中并没有'key'这个键,所以尝试调用时会抛出KeyError
解决方法是在调用之前先将这个键加入到字典中,如果之前已经加入,检查一下是否在之后将它删
除了。
IndexError
IndexError :索引错误,使用的索引不存在,常索引超出序列范围,什么是索引
这种错误通常表现为数组、字符串、元组等类型的越界访问。
在上面这个情况下,看上去没问题但会抛出越界异常,是因为在循环中我们将想要遍历的数组修改了,增加元素还好,一旦删除了元素,会导致数组长度变短,如果循环次数还是原来的数组长度的话,必然会导致数组越界。这个问题一般很难发现,所以当出现越界但又不知道到底是哪里出现问题的话,可以往这个方向思考一下。
IndentationError
IndentationError :缩进错误,错误的使用缩进量。
由于 Python 是对缩进敏感的,同一逻辑层应该保持相同的缩进, ":" 标记一个新的逻辑层, 增加
缩进 进入下一个代码层, 减少缩进 返回上一个代码层。如果错误使用就会抛出这个异常。
解决方法就是就错误位置增加或减少相应的缩进。
TypeError
TypeError :类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误
通常情况下,尝试对字符串进行修改将会抛出类型错误异常。众所周知,字符串是不可修改的数据
类型。
一般可以通过字符串拼接的方法进行解决
ZeroDivisonError
ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误
这个就不用多说了吧...
ValueError
ValueError :值错误,传给对象的参数类型不正确,像是给 int() 函数传入了字符串数据类型的参
数。
当给函数传入不正确的参数时,会抛出值错误异常。检查参数类型和数量,重新传入正确的即可。
不常见异常类型
不常见的异常类型太多了,通常情况下也很难遇到,我就不介绍了,欢迎有兴趣的小伙伴进行补
充。
简单异常处理
try-except
try 是 Python 中的一个保留字,具体作用是尝试执行 try 中的代码内容,如果 try 后的语句发生了异
常,则跳出该段语句,执行 except 中的内容。
except 可以捕捉到异常类型,具体用法可分为以下几类:
1.except: 只要try中出现异常,就会执行except中的代码。
因此,只要你的代码使用了以下内容,就永远不会报错(开玩笑呢你可别当真,不报错不代表
没有错误
2. except Type: 只有出现
3.except Type as data: 获取异常信息存入data
4.except (Type1,Type2,Type3):
同时处理多种异常,捕捉到元组中任何一种异常,都会执行except中的操作。
5.except Type1: except Type2: 分类处理异常,类似c语言中的switch-case,捕捉到不同异常进行不同的操作。
try 和 except 应该成对出现,只有 try 而没有 except 会抛出语法错误。
千万要注意,通常情况下, try 可以利用异常,但无法解决异常。虽然使用 try 之后不会再出现异
常,但只是 Python 将这个异常 ‘ 藏 ’ 了起来,并没有使之解决,所以平时不建议遇到异常就使用 try 。