错误和异常处理
优雅地处理Python的错误和异常是构建健壮程序的重要部分。在数据分析中,许多函数函数只⽤于部分输⼊。例如,Python的float函数可以将字符串转换成浮点数,但输⼊有误时,有 ValueError 错误:
In [197]: float('1.2345')
Out[197]: 1.2345
In [198]: float('something')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-198-439904410854> in <module>()
----> 1 float('something')
ValueError: could not convert string to float: 'something'
假如想优雅地处理float的错误,让它返回输⼊值。我们可以写⼀个函数,在try/except中调⽤float:
def attempt_float(x):
try:
return float(x)
except:
return x
当float(x)抛出异常时,才会执⾏except的部分:
In [200]: attempt_float('1.2345')
Out[200]: 1.2345
In [201]: attempt_float('something')
Out[201]: 'something'
你可能只想处理ValueError,TypeError错误(输⼊不是字符串或数值)可能是合理的bug。可以写⼀个异常类型:
def attempt_float(x):
try:
return float(x)
except ValueError:
return x
可以⽤元组包含多个异常:
def attempt_float(x):
try:
return float(x)
except (TypeError, ValueError):
return x
某些情况下,你可能不想抑制异常,你想⽆论try部分的代码是否成功,都执⾏⼀段代码。可以使⽤finally:
f = open(path, 'w')
try:
write_to_file(f)
finally:
f.close()