一、异常
有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError
异常例子:
res=5/0 print(res) #运行报错 #ZeroDivisionError: division by zero
字符串与整型不能相加异常:
import random guess=random.randint(10,20) num=input('请输入一个数字:') print(num+guess) # 请输入一个数字:6 # Traceback (most recent call last): # File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 6, in <module> # print(num+guess) # TypeError: Can't convert 'int' object to str implicitly
英文字符串转整型异常:
d={'price':20} price=input('请输入一个数字:') d['price']-=int(price) print(d) # D:SystemPython3python.exe F:/自动化学习/课堂练习/day8/new_api/异常处理.py # 请输入一个数字:ert # Traceback (most recent call last): # File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 16, in <module> # d['price']-=int(price) # ValueError: invalid literal for int() with base 10: 'ert'
下标越界异常:
li=[1,2,3,4,5] print(li[9]) # Traceback (most recent call last): # File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 27, in <module> # print(li[9]) # IndexError: list index out of range
二、异常处理
1、当代码中运行可能会遇到异常时,可以用try ... except 例如输入的值异常时:可以try ..except ValueError as e:
first=input('请输入除数') second=input('请输入被除数') #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常 try: first=int(first) second=int(second) res=first/second print(res) #except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里 print(e) print('请输入整数') else:#没有出错,这个是没有异常时候走,不是必须写的 print(res) #结果: 请输入除数f 请输入被除数2 invalid literal for int() with base 10: 'f'
2、多个异常可以:try...excepy...excepy,例如输入的值异常、被除数不能为0异常时:可以try ...except ValueError as e:...exceptZeroDivisionErroras e:
first=input('请输入除数') second=input('请输入被除数') #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常 try: first=int(first) second=int(second) res=first/second print(res) #except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里 print(e) print('请输入整数') except ZeroDivisionError as e: print(e) print('除数不能为0') else:#没有出错,这个是没有异常时候走,不是必须写的 print(res) #结果:请输入除数12 请输入被除数0 division by zero 除数不能为0
3、当多个异常可以只用一个try ...except Exception as e:
first=input('请输入除数') second=input('请输入被除数') #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常 try: first=int(first) second=int(second) res=first/second except Exception as e: print(e) else:#没有出错,这个是没有异常时候走,不是必须写的 print(res) #结果: 请输入除数qw 请输入被除数g invalid literal for int() with base 10: 'qw'
4、finally:不管出错或者没有出错都会执行它,这个不是必须写的。
一般要写的情况有:例如操作数据库成功或者失败,都要关闭数据库
first=input('请输入除数') second=input('请输入被除数') #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常 try: first=int(first) second=int(second) res=first/second print(res) #except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError # except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里 # print(e) # print('请输入整数') # except ZeroDivisionError as e: # print(e) # print('除数不能为0') except Exception as e: print(e) else:#没有出错,这个是没有异常时候走,不是必须写的 print(res) finally:#不管出错或者没有出错都会执行它,不是必须写的。要写的情况:例如操作数据库成功或者失败,都要关闭数据库 print('我是finally')