Python中检测处理异常是非常重要的,这可以增加代码的健壮性,我们在写python程序的时候,会可能会遇到一些不可预料的情况,一旦遇到这些情况,运行时程序便可能会崩溃。
比如:读写文件时候文件打开错误或者文件写入错误,写爬虫时网络请求失败,返回错误.再或者函数处理一些不确定参数时候,都可以用到异常捕获。
异常可以通过try语句来检测.任何在try语句块里的代码都会被监测,检查有无异常发生。
try语句有两种主要形式:try-except和try-finally.这两个语句是互斥的,也就是说你只能使用其中的一种.一个try语句可以对应一个或多个except子句,但只能对应一个finally子句,或是一个try-except-finally复合语句.
1、try-except语句
try-except语句(以及其更复杂的形式)定义了进行异常监控的一段代码,并且提供了处理异常的机制.
最常见的try-except语句语法如下所示,它由try块和except块(try_suite和except_suite)组成,也可以有一个可选的错误原因。首先尝试执行try子句,如果没有错误,忽略所有的except从句继续执行,如果发生异常,解释器将在这一串处理器(except子句)中查找匹配的异常。
简单用法(except后面不跟特定异常,这会捕获所有异常)这种好处就是你不知道会发生什么异常,尽管用;坏处就是当异常发生时候,不能清楚了解到底发生哪种异常。
我们可以发现,连接没有成功,但程序是正常运行的,会继续往下运行如果没有try,程序则会中断报错。我们发现第一个print并没有运行,这是因为try语句块中异常发生点后的剩余语句永远不会到达(所以也永远不会执行)。
下面这个是捕获特定异常的,其他异常不会被捕获:
2、带有多个except的try语句
可以把多个except语句连接在一起,处理一个try块中可能发生的多种异常,如下所示::
首先尝试执行try子句,如果没有错误,忽略所有的except从句继续执行.如果发生异常,解释器将在这一串处理器(except子句)中查找匹配的异常,如果找到对应的处理器,执行流将跳转到这里。示例代码:
运行结果:
3、处理多个异常的except语句
我们还可以在一个except子句里处理多个异常.except语句在处理多个异常时要求异常被放在一个元组里:
上边展示了如何处理同时处理两个异常.事实上except语句可以处理任意多个异常,前提只是它们被放入一个元组里,如下所示:示例代码:
运行结果如下:
4、捕获所有异常
刚开始我讲过一个捕获所有异常的方法,不过这种方法不推荐使用,原因我上面说过,我们无法得知捕获的异常是什么。
我们可以用下面这种:
注意!注意!这是python2的捕获方法,在pytho3中为exceptExceptionase
示例:
关于捕获所有异常,你应当知道有些异常不是由于错误条件引起的.它们是SystemExit和KeyboardInterupt。SystemExit是由于当前Python应用程序需要退出,KeyboardInterupt代表用户按下了CTRL-C(^C),想要关闭Python.。在真正需要的时候,这些异常却会被异常处理捕获,一个典型的迂回工作法代码框架可能会是这样:
总结:核心风格:不要处理并忽略所有错误
Python提供给程序员的try-except语句是为了更好地跟踪潜在的错误并在代码里准备好处理异常的逻辑.这样的机制在其他语言(例如C)是很难实现的.它的目的是减少程序出错的次数并在出错后仍能保证程序正常执行.作为一种工具而言,只有正确得当地使用它,才能使其发挥作用。
码字不易,多多