python异常

程序运行时,经常会出现各种各样的错误,这些错误统称为异常。

python中常见异常:

异常描述
NameError尝试访问一个没有声明的变量引发的错误
IndexError索引超出序列范围引发的错误
IndentationError缩进错误
ValueError传入的值错误
KeyError请求一个不存在的字典关键字引发的错误
IOError输入输出错误(如读取文件不存在)
ImportErrorImport无法找到模块或from找不到名称
AttributeError尝试访问未知的对象属性引发的错误
TypeError类型不合适引发的错误
MemoryError内存不足
ZeroDivisionError除数为0引发的错误
FileNotFoundError文件没有发现异常

一、Python异常处理语句

1、try…except语句处理异常

在Python中,提供了try..except语句用来捕获并处理异常,在使用的时候,把可能产生错的代码放在try语句中,把处理结果放在expect语句块中,这样当try语句块中出现错误后,将执行expect语句块中的代码,如果try语句块中没有错误,expect将不会执行,语法格式如下:

try:
    block1
expect exceptname as alias:
    block2

参数说明:

  1. block1:表示可能出现的错误代码
  2. exceptname:表示要捕获的异常名称,as alias表示为异常指定别名,如果except后面不加异常名称,表示捕获所有异常。
  3. block2:表示异常处理模块,可以输出固定信息,也可以通过别名输出信息

例如:定义size.py模块,定义函数hello(),并设置两个形式参数,通过try捕获异常并处理,如图:

expect后面可以同时处理多个异常,并用逗号分隔,命令如下:

except (ValueError,ZeroDivisionError)

下面例子定义文件未发现异常,使用FileNotFoundError,如图:

注意:如果捕获全部异常,直接使用except,后面什么都不接即可

2、try….except…else语句

在Python中,还有一种异常处理语句,try…except…else语句,其中else语句表示当try语句无法捕获到异常的时候要执行的语句,如果try语句发现异常的时候,else语句不会被执行.

例如:定义模块size.py,使用try语句捕获异常,如果没有捕获到将执行else语句中的代码,如图:

3、try…except…finally语句

完整的异常处理语句应该包含finally代码块,通常情况下无论异常有无发生,finally中的代码块都会被执行,语法格式如下:

try:
    block1
except exceptionname as a:
    block2
finally:
    block3

可以将无论是否出现异常都要执行的代码块加入到finally语句块中。

说明:使用except语句是为了处理异常,无论是否发生异常,finally中的代码都会被执行,如果分配了有限的资源(如打开文件),则应将释放这些资源的代码放入到finally代码块中。

例如:定义模块size.py

4、使用raise语句抛出异常

如果某个函数或者方法可能产生异常,但是不想在当前函数或者方法中处理这个异常,则可以使用raise语句在当前函数或者方法中抛出异常,语法格式如下:

raise exceptionname

参数说明:

  1. exceptionname:表示可选参数,用于指定异常名称以及异常信息的相关描述,如果省略,那么会将当前错误信息原样输出。

例如:定义函数,并从键盘输入两个数字,将数字做比较,如果存在异常将抛出,下方调用的时候会处理,如图:

5、自定义异常类,并使用raise抛出,如图:

  • 第3行:自定义异常类,名字为IntValueExcept,并且一定要继承Exception才行
  • 第8行:如果函数接收的参数不是100,将抛出错误
  • 第11行:调用函数并捕获错误
  • 第12行:捕获错误后打印错误内容

注意:自定义异常类需要继承Exception的,然后类体直接使用pass即可

6、使用Exception来捕获所有错误

下面例子创建一个gong.txt文件夹,然后打开这个文件夹,此时第一个异常不会被触发,因为gong.txt确实存在,但是第二个会触发,因为gong.txt不是文件而是文件夹,如图:

修改上面例子,定义文件权限异常,并删除gong.txt,再次执行,如图:

从上面两个例子可以看出,Exception可以捕获全部异常,并根据 异常类型打印对应的错误信息

标签