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

 

常见的错误类型和继承关系

看文档Built-in Exceptions

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 多种解决办法(代码片段

python的异常处理

python 基础---异常处理

在python 3.6中处理自定义编码时遇到类型错误

异常和TCP通讯

Python 基础6 异常 exception