Python学习笔记(16)-异常

异常

程序执行过程中出现导致程序终止的错误叫做异常

捕获一个异常

表现形式:

try:

  可能出现异常的代码

except 异常的名字:

  遇到异常时的处理方式

示例:

1 try:
2     print(aaaaaa)
3 except NameError:
4     print("---已知晓异常---")
5 print("Hello World"

运行结果:

---已知晓异常---
Hello World

说明:

1、单独执行print(aaaaaa)时异常名字是NameError

2、不使用异常处理时上面程序会报错并结束,不会输出Hello World,使用异常处理时可正常打印Hello World

3、except后的异常名字必须与执行代码时产生的真实异常名字一致

4、如try中的代码没有异常则正常执行try中代码,不执行except中的代码

捕获多个异常

try:

  可能出现异常的代码块

except (异常的名字1,异常的名字2):

  遇到异常时的处理方式

示例:

1 try:
2     print(aaaaaa)
3     print(3/0)
4 except (NameError,ZeroDivisionError):
5     print("---已知晓异常---")
6 print("Hello World")

运行结果:

---已知晓异常---
Hello World

说明:

1、3/0产生的异常名字为ZeroDivisionError

2、except后的异常名字必须与执行代码时产生的真实异常名字一致

捕获所有异常

try:

  可能出现异常的代码块

except Exception:

  遇到异常时的处理方式

示例:

1 try:
2     print(aaaaaa)
3     print(3/0)
4 except Exception:
5     print("---已知晓所有异常---")
6 print("Hello World")

运行结果:

---已知晓所有异常---
Hello World

捕获异常时获取异常的描述信息

产生异常时除了需要处理异常之外有时还需知道产生异常的原因

表现形式:

try:

  可能出现异常的代码块

except Exception as 变量名:

  遇到异常时的处理方式

  打印变量

示例:

1 try:
2     print(aaaaaa)
3 except Exception as a:
4     print("---已知晓异常---")
5     print(a)
6 print("Hello World")

运行结果:

---已知晓异常---
name 'aaaaaa' is not defined
Hello World

异常处理中使用else

含义:

如果没有捕获到异常,则执行else中的代码块

表现形式:

try:

  可能出现异常的代码块

except Exception:

  遇到异常时的处理方式

else:

  没捕获到异常时执行的代码块

示例:

1 try:
2     print("abcdefg")
3 except Exception:
4     print("---已知晓异常---")
5 else:
6     print("程序无异常")
7 print("Hello World")

运行结果:

abcdefg
程序无异常
Hello World

异常处理中使用finally

含义:

无论是否捕获到异常,最后都需执行finally中的代码块

表现形式:

try:

  可能出现异常的代码块

except Exception:

  遇到异常时的处理方式

else:

  没捕获到异常时执行的代码块

finally:

  最后一定会执行的代码块

示例:

1 try:
2     f = open("test.txt","r")
3 except Exception:
4     print("---已知晓异常---")
5 else:
6     print("程序无异常")
7 finally:
8     f.close()
9 print("Hello World")

运行结果:

---已知晓异常---
Traceback (most recent call last):
  File "F:/untitled/Python_jichu/异常.py", line 8, in <module>
    f.close()
NameError: name 'f' is not defined

说明:

因为不存在test.txt文件,所以f.close()会报错退出

posted @ 2018-09-05 14:20  立鼕  阅读(162)  评论(0编辑  收藏  举报