python语法错误概述_Python官方教程阅读总结-错误和异常

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

1. 语法错误

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

f563d0c49b7c

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

2. 异常

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

f563d0c49b7c

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

3. 处理异常

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

f563d0c49b7c

在这个例子中,使用一个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 这个基类(后面会讲到类的继承等,这部分出现得有点早),用户自定义的类可以做其它任何类能做的事情,但通常尽量保持简单,只构建一些属性用来提供异常信息输出。如下面官方文档中的例子:

f563d0c49b7c

6. 定义收尾操作

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

f563d0c49b7c

7. 预先定义的扫尾操作

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

f563d0c49b7c

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值