标签:type code ons odi get 高级语言 http finally tar
摘录:https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736
高级语言都会使用内置的一套try...except...finally...
的错误处理机制, 可以更高效的处理错误,
无需程序员自己写错误处理的代码。
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‘)
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
可以跨多层调用。函数main()调用bar(), bar调用foo(), 只要期间发生错误,try就会处理。
def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): try: bar(‘0‘) except Exception as e: print(‘Error:‘, e) finally: print(‘finally...‘)
如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序终止。
错误信息是Traceback (most recent call last)...。它是一个错误路径。可以在最后查看错误原因,定位错误位置。
可以把错误信息记录到日志。并让程序继续执行。
# err_logging.py import logging def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): try: bar(‘0‘) except Exception as e: logging.exception(e) main() print(‘END‘)
为错误是class,捕获一个错误就是捕获到该class的一个实例。所以,错误是根据情况故意创建的错误实例。
内置函数有各种类型的错误。也可以自己编写函数,然后抛出错误。
# err_raise.py class FooError(ValueError): pass def foo(s): n = int(s) if n==0: raise FooError(‘invalid value: %s‘ % s) return 10 / n foo(‘0‘)
尽量使用内置的函数。如ValueError, TypeError
标签:type code ons odi get 高级语言 http finally tar
原文地址:https://www.cnblogs.com/chentianwei/p/11871228.html