Exception,python的错误处理
Posted Mr-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Exception,python的错误处理相关的知识,希望对你有一定的参考价值。
摘录:https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736
错误处理
高级语言都会使用内置的一套try...except...finally...
的错误处理机制, 可以更高效的处理错误,
无需程序员自己写错误处理的代码。
try
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‘)
- 如果有错误,根据发生不同类型的错误,使用不同的except处理。
- int(‘a‘)会出发 ValueError
- 10/0会触发ZeroDivisionError。
- 否则代表没有错误,则执行else。
- 最后都要执行finally
常见的错误类型和继承关系
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
try的好处
可以跨多层调用。函数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)...。它是一个错误路径。可以在最后查看错误原因,定位错误位置。
logging模块
可以把错误信息记录到日志。并让程序继续执行。
# 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‘)
- 编写一个错误类FooError。
- 用raise语句,生成FooError的实例。
尽量使用内置的函数。如ValueError, TypeError
以上是关于Exception,python的错误处理的主要内容,如果未能解决你的问题,请参考以下文章
NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException 多种解决办法(代码片段