Python官方教程阅读总结-错误和异常

python中有两类显著的错误:语法错误和异常

1. 语法错误

    不符合python的错码书写规范引起的错误,例如没有加冒号,缩进不正确,括号少了一边等,如下例:

    上例中,for语名后面没冒号而引起语法错误,在输出的错误信息中,先指出了错误所在的行数,然后箭头指出了错误的位置,最后报出了错误的类型(SyntaxError)以及错误的原因。

2. 异常

    当语法没有问题的时候,在执行语句的过程中检测到的错误叫异常。大多数情况下,异常能够被程序处理,如下面的异常:

       上例中,语法没有错误,在执行 5 / 0 的时候,发现除数是0,于是就抛出了异常。异常信息的最后一行包含了异常的类型(ZeroDivisionError)以及异常的具体原因(division by zero)。这些异常类型通常是python内置的异常类的名字,用户也可以自己定义异常

3. 处理异常

    异常发生后如果不处理,就会强制使程序中断,如果不想因为异常而中断程序的执行,就要处理异常。python中多用try ... except 语句来处理异常,如下面的例子:

    在这个例子中,使用一个while的无限循环,检测用户输入的内容,如果可以转换成数字,就结束循环,进行下一步,如果不能转换成数字,就处理异常,一直循环,提示用户输入数字,可以看到检测到异常后,程序就没有终止运行,而是在处理发生的异常

    这里面,用关键字 try 来执行可能发生异常的语句,如果检测到异常,且异常类型与except后面的异常类型相符,就执行except后面的语句来处理异常。如果检测到的异常与except后面的异常类型不相符,该异常就会被传到外部的try语句来处理,如果没有找到相应的处理语句,就会抛出unhandled exception

    一个try语句后也可以跟多个except 来处理异常,以匹配可能发生的不同的异常类型。同时,一个except语句后面也可以跟多个异常类型,如:

    except ( RuntimeError, TypeError, NameError ):

            print("Error happened")

    try ... except ... else 语句, 其中else语句是可选的,但必须跟在except语名的后面。作用是:当try中的语句没有抛出异常时,一定会执行的语句就放在else语句中

4. 抛出异常

    python中使用 raise 语句来抛出异常,用法如下:

    try: 

        raise NameError ( 'Hi There' )

    except NameError:

        print( ' An exception flew by! ' )

        raise

    该实例中,使用raise 抛出异常,同时用except处理抛出的异常,如果不打算处理该异常,就可以用 re-raise的方法来重新抛出(except 中再raise)

    raise 语句抛出异常时,后面跟的要么是一个异常实例,要么是一个异常类,如果是一个异常类的话,就会调用该类的无参构造函数来实例化。

5. 用户自定义的异常

    上面说到除了内置的异常类外,用户也可以自己定义异常,但自定义的异常要直接或间接地来继承 Exception 这个基类(后面会讲到类的继承等,这部分出现得有点早),用户自定义的类可以做其它任何类能做的事情,但通常尽量保持简单,只构建一些属性用来提供异常信息输出。如下面官方文档中的例子:

6. 定义收尾操作

    在异常处理的过程中,try语句的另一个可选语句是finally,无论异常是否抛出,是否处理,都要执行的扫尾操作就用finally语句来执行。如下:

7. 预先定义的扫尾操作

    一些对象定义了标准的扫尾操作,当这个对象不再需要时,无论该对象的执行是否成功,都会执行这个预先标准扫尾操作。例如 with 语句就预先定义了扫尾操作,如下例:

在上例中,用 with 语句打开的文件对象 f 论如何都会进行关闭操作,这是因为 with 已经预先定义了关闭这一扫尾操作,这也是上一节中为什么提倡用 with语句 来进行文件的打开操作


这一小结结束,具体请参考官方文档:https://docs.python.org/3/tutorial/errors.html

你可能感兴趣的:(Python官方教程阅读总结-错误和异常)