带有多个except的try 语句
>>> def self_float(obj):
try:
return float(obj)
except ValueError:
retval = none
return retval
>>> self_float(1234)
1234.0
>>> def self_float(obj):
try:
return float(obj)
except ValueError:
retval = 'could not convert non-number to float'
return retval
>>> self_float(1234)
1234.0
>>> self_float("foo")
'could not convert non-number to float'
改造之后的的函数,我们已经可以探测到非法的字符串输入了,可如果传递一个非法的对象,还是会受伤。
>>> self_float(foo)
Traceback (most recent call last):
File "<pyshell#112>", line 1, in <module>
self_float(foo)
NameError: name 'foo' is not defined
此时需要多个except语句,每个except语句对应一种异常类型。
>>> def safe_float(obj):
try:
return float(obj)
except ValueError:
retval = 'could not convert non-number to float'
except TypeError:
retval = 'object type cannot be converted to float'
return retval
>>> safe_float(())
'object type cannot be converted to float'
>>> safe_float('sd1')
'could not convert non-number to float'
处理多个异常的except语句:
我们还可以在一个except语句里处理多个异常。except语句在处理多个异常时要求异常被放在一个元组里。
改进上述函数,要求所有异常必须使用同样的代码处理
>>> def safe_float(obj):try:
return float(obj)
except (ValueError,NameError,TypeError):
retval = 'object type cannot be converted to float'
return retval
>>> safe_float(())
'object type cannot be converted to float'
>>> safe_float("123")
123.0
>>> safe_float('123e')
'object type cannot be converted to float'