阅读 92

错误处理

用大量的错误码表示是否出错十分不便:

>>> def foo():
...     r = some_function()
...     if r ==(-1):
...             return (-1)
...     return r
...
>>> def bar():
...     r = foo()
...     if r ==(-1):
...             print('Error')
...     else:
...             pass
...
>>>
复制代码

从上面可以看到正常结果和错误码混在一起了。导致调用者需要用大量的代码来判断是否出错。

try 的使用:

>>> try:
...     print('try...')
...     r  = 10 /0
...     print('result:', r)
... except ZeroDivisionError as e:
...     print('except:', e)
... finally:
...     print('finally...')
...     print('END')
...
try...
except: division by zero
finally...
END
复制代码

上面为输出结果

可以有多个except 来捕获不同类型的错误:

>>> try:
...     print('try...')
...     r = 10 / int('a')
...     print('result:', r)
... except ValueError as e:
...     print('ValueError:', e)
... except ZeroDivisionError as e:
...     print('ZeroDivisionError:', e)
... finally:
...     print('finally...')
...     print('END')
...
try...
ValueError: invalid literal for int() with base 10: 'a'
finally...
END
复制代码

如果没有错误发生,可以在 except 语句后面加一个 else, 当没有错误发生时,会自动执行 else 语句:

>>> try:
...     print('try...')
...     r = 10 / int('2')
...     print('result:', r)
... except ValueError as e:
...     print('ValueError:', e)
... except ZeroDivisionError as e:
...     print('ZeroDivisionError:', e)
... else:
...     print('no error!')
... finally:
...     print('finally...')
...     print('END')
...
try...
result: 5.0
no error!
finally...
END
复制代码

总结:

1、Python 内置的 try...except...finally 用来处理错误十分方便。出错时,会分析错误信息并定位错误发生的代码位置才是关键
2、程序可以主动抛出错误,让调用者来处理相应的错误。但是,应该在文档钟写清楚可能抛出哪些错误,以及原因
复制代码