Python异常

来源:互联网 发布:手机号码采集器软件 编辑:程序博客网 时间:2024/06/11 10:39

oxo1简介?

异常:

编写程序的时候,程序员通常需要辨别事件的正常过程和异常(非正常)情况。这类异常事件可能是错误(试图除以0),或者是不希望经常发生的事情。

怎么处理异常?

为了处理这些异常事件,可以在所有可能发生这类事件的地方都使用条件语句(比如让程序检查除法的分母是否为0)这么做可能会没效率和不灵活,而且还会让程序难以阅读。不用担心,强大的python的异常对象提供了非常强大的解决方案。


什么是异常对象?

python用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。

如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(traceback,一种错误信息)终止执行。

按自己的方式出错

  • raise语句
    可以使用一个Exception的子类或者实例参数调用raise语句。
    可以用dir(exceptions)查看内建的异常。(需要import exceptions)
    可以使用dir()函数列出模块的内容

  • 自定义异常类
    尽管内建的异常已经很多,但有时我们还是需要自己创建自己的异常类。
    如何创建自己的异常类?像下面这样

 class SomeCustomException(Exception): pass

捕捉异常

关于一场最有意思的地方,就是可以处理它们(通常叫做诱捕或者捕捉异常)

  • 该功能可以使用try/except语句来实现。

如果没有捕捉到异常,它会被“传播”到调用的函数中。如果那里依然没有捕获,这写异常就会“浮”到程序的最顶层。

  • 万事大吉
    try /expect /else进行没有异常情况的处理。
    下面是一个简单计算除法的代码:
    while True:             # 如果出错必须重新输入,否则无法跳出循环        try:            x=input('Enter the first number: ')            y=input('Enter the second number: ')            print(int(x)/int(y))        except Exception as e :     # 如果出错了,打印错误信息            print(e)            print('Invalid input,please try again')        else:                       # 计算过程没有异常,跳出            break

这里的循环只在没有异常的情况下才会退出(else句子中的break语句退出)

finally子句

try/except/else/finally:无论是否发生异常情况,都需要执行一些清理工作。(如通信过程)

异常和函数

faulty中产生的异常通过faulty和ignore_exception传播,最终导致了栈跟踪。

总结

异常处理并不是很复杂。如果知道某段代码可能会导致某种异常,而又不希望以堆栈跟踪的形式终止,那么就需要添加try/except和、try/finally语句(或者它们的组会)进行处理。

注意:有时候用异常会比if/else效率快。

原创粉丝点击