2.检测python异常并处理
1)try-except语句:
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
使用例子:
try:
int('abc')
sum=1+'1'
f=open('我为什么是一个文件.txt')
print(f.read())
f.close()
except OSError as reason:
print('文件出错啦\错误原因是'+str(reason) )
except TypeError as reason:
print('文件出错啦\错误原因是'+str(reason) )
except ValueError as reason:
print('文件出错啦\错误原因是'+str(reason) )
返回结果为:
文件出错啦\错误原因是invalid literal for int() with base 10: 'abc'
#注:若有多个错误先返回第一个
或者
try:
int('abc')
sum=1+'1'
f=open('我为什么是一个文件.txt')
print(f.read())
f.close()
except (OSError,TypeError,ValueError) :
print('出错啦')
#注:
将三种错误合成一个元组进行检测,还要有一个出错,就报错
2)try-finally语句
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
3)raise语句
自己引起一个异常
raise ZeroDivisionError('除数为0')
32讲习题部分答案
1.请问一下代码是否会产生异常,如果会的话,请写出异常的名称:
mylist=[1,2,3,4,,]
语法错误:SyntaxError:invalid syntax
2.请问一下代码是否会产生异常,如果会的话,请写出异常的名字:
mylist=[1,2,3,4,5]
print(mylist[len(mylist)])
IndexError,由于len(mylist)长度为5,5超出了mylist的索引范围
3.请问一下代码是否会产生异常,请写出异常的名称:
mylist=[3,5,1,4,2]
mylist.sorted()
AttributionError,sorted是字符串的内置方法,列表的内置方法,列表的内置方法是list.sort()。
4.如果一下代码是否会产生异常,如果会的话,请写出异常的名字:
mydict={‘host’:'www.123.com','port':'80'}
print(mydict['server'])
异常名称:KeyError 因为字典中没有‘server’这个键
为了避免这个异常的发生,可以使用dict.get()方法
if not mydict.get('server'):
print('您访问的键不存在')
5.请问下面是否会产生异常,请写出异常的名称
def myfun(x,y):
print(x,y)
f(x=1,2)
如果使用关键字参数的话,需要两个参数均使用关键自参数
6.请写出一下程序异常的名称
f=open(r'c:\test.txt',wb)
f.write('i love u')
f.close()
open有两个参数,应该是‘wb’,python会把其当做变量名,引发NameError
33讲习题答案
0.我们使用什么方法处理程序中出现的异常?
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
1.一个try语句可以和多个except语句搭配么?为什么?
可以,因为try语句中可能出现多类异常,利用多个except语句可以捕获并处理我们感兴趣的异常
2.如何同一处理多类异常?
try:
int('abc')
sum=1+'1'
f=open('我为什么是一个文件.txt')
print(f.read())
f.close()
except (OSError,TypeError,ValueError) :
print('出错啦')
2.之前玩的一个小程序,只要输入非整形数据,程序会like蹦出一场,请使用一下处理方法:
import random
secret=random.randint(1,10)
try:
temp=input("数字:")
guess=temp#将guess等于了一个字符串
except(ValueError,EOFError,KeyboardInterrupt):
print('输入错误!')#排除错误
guess=secret
print('不猜了')