一、捕获一个异常
def get_age():
while True:
try:
n = int(input('How old are you?'))
return n
except ValueError:
print('Please enter an integer value.')
这个例子中,只捕获一个异常:ValueError,这是int()函数会引发的一种异常。这个函数可能引发VaulueError,还会引发TypeError。
二、同时捕获多个异常
def convert_to_int1(s, base):
try:
return int(s, base)
except (ValueError, TypeError):
return 'error'
这个函数用到了int()函数,它可以引发ValueError和TypeError。
int()函数的两个参数,第一个是数字组成的字符串,第二个是不小于2且不大于36的正整数。它们表达的是以第二个参数为基数的第一个参数作为数值时的十进制形式。例如,int('100',2)为4,int('100',3)为9。
例1:捕获ValueError
>>>convert_to_int1('three',3)
'error'
例2:捕获另一种ValueError
>>>convert_to_int1('2',1)
'error'
第二个参数不符合条件。
例3:捕获TypeError
>>> convert_to_int1(100,3)
'error'
第一个参数必须是字符串,类型不对。
这种方式,不能区分捕获到的是哪一种异常。因为不管捕获到哪一种,显示都是一样的。
三、分别捕获多个异常
def convert_to_int2(s, base):
try:
return int(s, base)
except ValueError:
return 'value error'
except TypeError:
return 'type error'
例1:捕获ValueError
>>>convert_to_int2('three',3)
value 'error'
例2:捕获另一种ValueError
>>>convert_to_int2('2',1)
'value error'
第二个参数不符合条件。
例3:捕获TypeError
>>> convert_to_int2(100,3)
'type error'
第一个参数必须是字符串,类型不对。
这种方式,可以分辨出是哪一种异常。
四、捕获所有异常
def convert_to_int3(s, base):
try:
return int(s, base)
except:
return 'error'
例1:捕获ValueError
>>>convert_to_int3('three',3)
'error'
例2:捕获另一种ValueError
>>>convert_to_int3('2',1)
'error'
第二个参数不符合条件。
例3:捕获TypeError
>>> convert_to_int3(100,3)
'error'
第一个参数必须是字符串,类型不对。
这种,也不能分辨出是哪一种异常。但是,写法简单,不用知道有什么异常。用在不用关心发生了何种错误的场合。













网友评论