目录
异常处理的基本语法
主动触发异常
断言
自定义异常
真正使用 try ... except .... 的位置
异常处理的基本语法:
复制代码
1
2
3
4
5try: 被检测的代码块 except 异常类型: #不填写异常类型则默认是 BaseException(可以接受Python解释器中已经声明的异常种类) try中的代码块出现了异常,就会执行这个位置的逻辑
1.如果只是使用单个 except 去接受 try 中抛出的错误,则 except 后面的填写的异常类型也必须是 try代码块中所抛出的错误类型
名称必须相同,否则 依旧会报错 。如:
复制代码
1
2
3
4
5
6
7try: a = 1/0 # 会抛出 ZeroDivisionError 异常 except ZeroDivisionError: #如果这个位置说明了错误类型,则必须和上方抛出的错误类型相匹配 print("除零错误")
2.一个try 后可以跟 多个 except 。 可以接受不同的异常类型
复制代码
1
2
3
4
5
6
7
8
9
10
11try: a = a + 1 #会抛出 NameError lis = [1,2,3] b = lis[4] #会抛出 IndexError except IndexError: print("下标越界") except NameError: print("变量名未定义")
3.except 后可以不填写 错误类型 则会默认是 BaseException(万能异常接受)
4. try ... except .... else
当try 代码块中的代码都没有抛出错误时,才会 执行 else 的代码
复制代码
1
2
3
4
5
6
7
8
9try: a = 1 a = a + 1 print("代码正常执行") except NameEroor: print("代码出错了") else: print("try的代码都没有出错") #try的代码都正常执行没有出错,才会执行该代码块
5.try... except... finally # 由finally 必须有 try
finally 指的是 :
- 无论代码中是否出现异常,该finally中的代码都会执行 。但执行顺序有区别
- 当try中代码正常无异常时,finally中的代码会在try的代码执行完毕后才执行
- 如果try中代码出现了异常,若该异常有 except 接收,则会执行完 except 中的代码后才执行finally中的代码
- 但是如果该异常抛出但是没有 except 去接收, 则 finally中的代码会在 错误抛出之前就执行。
就第4举例:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15try: lis = [1,2,3] b = lis[4] except NameError: #没有except 去接受 IndexError错误 print("111") finally: print("222") """ 222 Traceback (most recent call last): File "D:/BianCheng/python_test/s19/day21/demo.py", line 91, in <module> b = lis[4] IndexError: list index out of range """
主动触发异常:
关键字 raise
格式: raise 错误类型(错误提示信息)
复制代码
1
2
3
4
5try: raise TypeError("我就想你错") except TypeError as e: print(e) # 我就想你错
注: TypeError as e 中的 e 只是一个约定俗成的别名。。。。
print(e) 可以打印错误的具体信息
复制代码
1
2
3
4
5
6try: a = int("as") except ValueError as e: print(e) #打印 invalid literal for int() with base 10: 'as'
断言:
关键字 assert
格式: assert 条件
作用: 当 条件不满足时 ,强制报错
复制代码
1
2
3
4
5
6assert 1<0 # 打印结果 Traceback (most recent call last): File "D:/BianCheng/python_test/s19/day21/demo.py", line 101, in <module> assert 1<0 AssertionError
自定义异常:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class EvaException(BaseException) #建议继承 BaseException 因为该类是所有的错误类型的超类 pass #其实就可以 """ def __init__(self,msg): self.msg = msg def __str__(self): return self.msg """ try: raise EvaException("类型错误") exception EvaException as e: print(e) # 类型错误
真正使用 try ... except .... 的位置:
- 把错误处理和真正的工作分开来
- 代码更易组织,更清晰,复杂的工作任务更容易实现
- 不会因为一些小的疏忽使程序意外奔溃了
最后
以上就是冷艳小馒头最近收集整理的关于Python的异常处理的全部内容,更多相关Python内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复