开发者学堂课程【Python入门 2020年版:异常的使用场景】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10409
异常的使用场景
内容介绍:
一、except 语句处理异常
二、异常的使用场景
一、except 语句处理异常
try. ..except 语句处理程序运行过程中的异常,异常出现如下:
file = open(‘ddd.txt')
#打开一个文件用来后面读取这个文件,实际上不存在文件“ddd.txt”。
print(file.read())
file.close()
#打开一个文件用来读文件,运行结果会提示异常,此时就不会继续往下读。运行会提示在第一行就已经出错。
如果程序不在第一行出错的地方崩了,它接着往下走了,读东西的文件都不存在读不出数据的。
报错的目的就是已经出现问题,系统会崩了,避免再出更多的问题,必须要解决问题,否则后边的代码没办法运行。这就是异常机制,必须要解决问题,否则程序无法继续运行,避免程序的一错再错。
1.解决方法一:
try:
file = open( " ddd.txt")
print(file.read())
file.close()
#给异常起了一个变量名 e
print(e)
#运行这段代码,控制台会打印错误提示:
[ Errno 2] No such file or directory: 'ddd.txt’。其中 Exception 是一个父类。
2.解决方法二:
try:
file = open( " ddd.txt")
print(file.read())
file.close()
print('
出错了!!!
')
#也可以不写 except Exception as e,直接 except,控制台会直接打印出错了!!!
3.解决方法三:
try:
print(1 / 2)
file = open( ' ddd.txt ')
print(file.read())
file.close()
except (FileNotFoundError) as e:
#表示处理指定类型的异常
print(e)
#运行这段代码,控制台会打印错误提示:[ Errno 2] No such file or directory: 'ddd.txt’。
如果将第二行代码改为1/0,系统会直接崩掉,不会向下运行。1/0是除此之外的另一种错误,但是由于此处处理的是指定类型的异常,所以程序捕捉不到1/0类型的错误
可以将1/0类型的错误捕捉加进去:except (FileNotFoundError,ZeroDivisionError) as e,程序就会继续运行。
try:
person ={' name ' : 'zhangsan'}
print(person['age'])
print(1 / 2)
file = open( ' ddd.txt ')
print(file.read())
file.close()
except (FileNotFoundError) as e:
print(e)
#运行程序后,程序会崩掉。如果用中括号捕捉数据内容,而这个内容不存在,则程序会出现问题。因为程序捕捉不到keyerror 类型的错误。
可以将该类型的错误捕捉加进去:except (FileNotFoundError,ZeroDivisionError,KeyError) as e,程序就会继续运行。
处理多个语句错误时可以不用这么麻烦,直接使用父类 Exception
其中 FileNotFoundError 继承 OSError,OSError 继承 WindowsError, WindowsError 继承自 Exception。
而 ZeroDivisionError 继承 ArithmeticError(算法的错误),ArithmeticError 也继承 Exception。KeyError 继承自LookupError,LookupError 继承自 Exception。
无论那个错误都继承自 Exception,所以可以直接用父类 Exception 代替处理指定类型的异常。
二、异常的使用场景
age = input('
请输入您的年龄: ')
#input 接收到的用户输入是一个字符串
if int(age) > 18:
print( '
欢迎来到我的网站’)
#这串代码会存在一个问题,不能控制输入的类型,如果输入的为数字之外的数据,如“kjhf”程序就会报错,控制台提示 ValueError: invalid literal for int() with base 10: ‘kjhk '。
解决方法:
1.初次修改
age = input("
请输入您的年龄:")
if age.isdigit():
#判断输入的年龄是否是数字
age = int(age)
if age > 18:
print( '
欢迎来到我的网站")
else:
print(
未满18岁,请自动离开')
else:
print('
输入的不是数字)
#运行程序后就只能输入数字,但是当年龄不是整数的时候,也会判断该输入不是数字。
2.再次修改
age = input("
请输入您的年龄:")
try:
age = float(age)
except valueError as e:
print( '
输入的不是数字')
#先把输入的年龄数字转换为小数,判断是否是数字。
else:
if age > 18:
print( '
欢迎来到我的网站")
else:
print('未满18岁,请自动离开')
#当你很多时候判断不了语句的正确性时,就可以使用判断语句。除 except 外下周会讲正则表达式\d+(.?\d+)? ,\d(数字)+(出现一次或多次) .?( 出现0次或一次)。
没有正则表达式的话,你来判断这个字符串它输入的内容是否是一个合法的数字,你其实是没有办法判断的。