什么是异常处理
python内置了一套try···except···finally的错误处理机制
当程序出错的时候进行捕捉,然后根据捕捉到的错误信息进行响相应的处理
常用的内建异常
初识异常处理
如例
让用户进行输入,提示用户输入一个数字,如果用户输入的是数字就转换成int类型,然后打印用户输出的数字,如果用户输入的不是数字,就会转换出错,如果出错就提示用户输入的类型错误
try: n = int(input("请输入一个数字>>>")) print('你输入的是数字',n) except Exception as e: print('输入类型错误,你应该输入数字') finally: print('------end------')
测试
正确: 请输入一个数字>>>12 你输入的是数字 12 ------end------
错误: 请输入一个数字>>>aaaaa 输入类型错误,你应该输入数字 ------end------
分析:
当我们认为某些代码可能会出错时,就可以用try来运行这段代码
如果执行出错,则后续代码不会执行,而是直接跳转至错误处理代码,即except语句块
执行完except后,如果有finally语句块,则执行finally语句块,至此执行完毕
对不同的异常进行不同的处理
try: n = int(input("请输出一个数字>>> ")) except ValueError as e: print("ValueError错误") except Exception as e: print("出现异常")
执行测试
请输出一个数字>>> 123 ansheng@Darker:~$ python3 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.py 请输出一个数字>>> asd ValueError错误
在处理异常时,如果出现错误,那么会首先匹配ValueError,然后再匹配Exception
捕捉多个错误
try: raise IndexError('出错了') except (IndexError, NameError) as e: # 捕获括号内的错误,并把错误信息赋值给e(一个except可以处理多个异常,这些异常将被放在一个括号里成为一个元组) print(e)
错误异常的基本结构
try: # 主代码块 pass except KeyError as e: # 异常时,执行该块 pass else: # 主代码块执行完,执行该块 pass finally: # 无论异常与否,最终执行该块,这块可有可无 pass
执行流程
- 如果出现错误,那么就执行except代码块,然后再执行finnly代码块
- 如果没有出现错误,那么就执行else代码块,然后再执行finnly代码块
- 无论有没有异常都执行finnly代码块
主动抛异常
try: # raise表示主动出发异常,然后创建一个Exception对象,Exception括号内的值就是Exception对象的值 raise Exception("主动出发的异常") except Exception as e: # 输出Exception对象的值 print(e)
执行测试
主动出发的异常