python中,至少有两种可区分的错误:语法错误(syntax error)和异常(exceptions)
目录
语法错误(syntax error)
语法错误(syntax error)又称为解析错误(parsing error)
因为python是一种脚本,没有python编译器这种说法,只有python解释器
所以python不存在编译错误,只有解析错误
出现语法错误时,python解释器会输出出现错误的行
并显示一个小箭头,指向行中最早出现错误的点
就像这样
异常(exception)
即便语句或表达式在语法上是正确的
然而当尝试执行脚本时,同样可能会引起错误,这种错误就是异常(exceptions)
当然,这些异常并非在所有情况下都是致命的
异常分很多种类,python解释器会输出内置异常的名称给我们做参考
异常的分类可以参见以下官方文档:
https://docs.python.org/2/library/exceptions.html#bltin-exceptions
处理异常
和java类似,python中我们可以实现处理我们自己选定的异常,例如:
运行结果如下,当输入的是int类型的数据时,break跳出while,运行成功
当输入的是非int类型时,程序会不断提示你,直到你输入正确的类型(当然我们可以用ctrl+C中断运行)
实际上,用户输入ctrl+C中断程序的运行
其本质上也是昌盛了一种异常,也就是 KeyboardInterrupt 异常
当我们处理异常时:
- try和except之间的语句被执行
- 若没有异常发生,except语句将不被执行
- 若try和except之间的语句被执行时发生了异常,则该部分剩下的语句不再被执行,若except捕捉到了异常的类型,则直接跳转去执行except的语句,然后继续执行try和except之间剩下的语句
- 若try和except之间的语句被执行时发生了异常,则该部分剩下的语句不再被执行,若except没有捕捉到了异常的类型,那么这就是一个未被处理的异常(Unhandled exception),程序运行被终止
一个try后面可以跟着多个except语句
用于指定处理不同类型的异常
但是只有一个exception中的语句会被执行
一个exception也可以处理多种异常,我们可以用元组来完成(用圆括号,这个不能漏掉),例如:
有的朋友们写程序时,喜欢在最后会加上一个省略异常名称的except字句,作为通配符使用
当然这也写时要特别小心,因为这也写可能会掩盖程序真正的异常所在,最好在后面把异常raise回去,就像这样:
当出现I/Oerror时:
若出现ValueError时:
我们把程序稍微修改一下
此时,就会执行第3个except中的语句
其他
在except语句中,我们还可以在异常的后面指定变量
变量与异常的instance绑定(捕获的异常也是对象)参数存储在instance.args中
此外,我们还可以自己定义异常,这些高级的用法本文先不提了
本文摘自 :https://blog.51cto.com/u