我是靠谱客的博主 冷艳小馒头,这篇文章主要介绍Python的异常处理,现在分享给大家,希望可以做个参考。

目录

异常处理的基本语法

主动触发异常

断言

自定义异常

真正使用 try ... except ....  的位置


 

异常处理的基本语法:

复制代码
1
2
3
4
5
try: 被检测的代码块 except 异常类型: #不填写异常类型则默认是 BaseException(可以接受Python解释器中已经声明的异常种类) try中的代码块出现了异常,就会执行这个位置的逻辑

1.如果只是使用单个 except 去接受 try 中抛出的错误,则 except 后面的填写的异常类型也必须是 try代码块中所抛出的错误类型

名称必须相同,否则 依旧会报错  。如:

复制代码
1
2
3
4
5
6
7
try: a = 1/0 # 会抛出 ZeroDivisionError 异常 except ZeroDivisionError: #如果这个位置说明了错误类型,则必须和上方抛出的错误类型相匹配 print("除零错误")

2.一个try 后可以跟 多个 except 。 可以接受不同的异常类型

复制代码
1
2
3
4
5
6
7
8
9
10
11
try: 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
9
try: a = 1 a = a + 1 print("代码正常执行") except NameEroor: print("代码出错了") else: print("try的代码都没有出错") #try的代码都正常执行没有出错,才会执行该代码块

5.try... except... finally        # 由finally 必须有 try

finally  指的是 :

  1. 无论代码中是否出现异常,该finally中的代码都会执行 。但执行顺序有区别
  2. 当try中代码正常无异常时,finally中的代码会在try的代码执行完毕后才执行
  3. 如果try中代码出现了异常,若该异常有 except 接收,则会执行完 except 中的代码后才执行finally中的代码
  4. 但是如果该异常抛出但是没有 except 去接收, 则 finally中的代码会在 错误抛出之前就执行。

就第4举例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try: 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
5
try: raise TypeError("我就想你错") except TypeError as e: print(e) # 我就想你错

注: TypeError  as  e  中的 e 只是一个约定俗成的别名。。。。

print(e)   可以打印错误的具体信息

复制代码
1
2
3
4
5
6
try: a = int("as") except ValueError as e: print(e) #打印 invalid literal for int() with base 10: 'as'

 

 

断言:

关键字  assert 

格式: assert 条件

作用: 当 条件不满足时 ,强制报错

复制代码
1
2
3
4
5
6
assert 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
16
class 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 ....  的位置:

  1. 把错误处理和真正的工作分开来
  2. 代码更易组织,更清晰,复杂的工作任务更容易实现
  3. 不会因为一些小的疏忽使程序意外奔溃了

 

 

最后

以上就是冷艳小馒头最近收集整理的关于Python的异常处理的全部内容,更多相关Python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部