在Python中导致程序无法运行的有2种情况。
1;语法错误,这是致命错误,需要重新查看代码进行修改,比如:缩进问题,比如关键字错误。
2;程序异常,这不是致命错误,我们可以捕获它。
在Python中处理异常是用try - except代码代码块来处理的。
学习这章的目的是:告诉Python发生异常时怎么办。使用try-except代码块后,即便出现异常,程序也将继续运行:我们可以编写的友好的错误消息,而不是令用户迷惑的traceback。
举个例子:
zeroDivisionError: integer division or modulo by zero
大概意思是说;除数不能为0.
如何通过try - except,捕获这个异常,并且不会出现程序异常呢?
def ceshi(a,b):
return a//b
b=int(input('请输入一个除数:'))
a=int(input('请输入一个被除数:'))
try:
print(ceshi(a,b))
except ZeroDivisionError:
print('除数不能为0')
这样来看,就算除数输入0,也不会出现异常,不过还有一个问题,就是程序结束了,应该要让用户知道不能输入0之后,能输入其他数才对。加入一个while循环 和 退出条件完善一下:
def ceshi(a,b):
return a//b
while True:
b = input('请输入一个除数:')
if b =='退出':
break
else:
a = int(input('请输入一个被除数:'))
b = int(b)
try:
print(ceshi(a,b))
except ZeroDivisionError:
print('除数不能为0')
现在需要思考另外一个问题了,就是except 后面到底应该跟什么内容呢?我发现后面可以跟很多内容,都是大写字母开头的,我们可能需要记得少部分,但不需要全部去记忆,可以当发生异常的时候,把异常的第一段加入进去 即可。再看一个例子:
我想读取一个不存在的文件,Python抛出了异常:FileNotFoundError。现在我可以利用这个异常,捕获它,然后提醒用户;
FileNotFoundError。现在我可以利用这个异常,捕获它,然后提醒用户;
dizhi ="/Users/xuxizhi/Desktop/Python523.txt"
try:
with open(dizhi,'r',encoding='utf-8')as a:
a.write('我想用只读的方式打开这个文件,但现在这个文件不存在,应该会出现异常')
except FileNotFoundError:
print(f"提醒~提醒~{dizhi}不存在,无法读取")