什么是异常?
异常就是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。异常时Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
异常处理
捕捉异常可以使用try/except语句。
try/except 语句用来检测try语句中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需要在try里捕获它。
语法:
1
2
3
4
5
6
7
8
<code>try:</code>
<code> </code><code><语句> </code><code>#正常运行的代码</code>
<code>except <except_name>:</code>
<code> </code><code><语句> </code><code>#如果在try部分的代码中引发了‘except_name’的异常,则执行此段代码</code>
<code>except <except_name2>:</code>
<code> </code><code><语句> </code><code>#如果在try部分的代码中引发了‘except_name2’的异常,则执行此段代码</code>
<code>else</code><code>:</code>
<code> </code><code><语句> </code><code>#如果没有发生异常,则执行此段代码</code>
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
1、如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
2、如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
3、如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
9
10
11
12
13
<code>#!/usr/bin/python</code>
<code>#-*- coding:utf8 -*-</code>
<code> </code><code>obj = </code><code>open</code><code>(</code><code>"logfile"</code><code>, </code><code>'w'</code><code>)</code>
<code> </code><code>obj.write(</code><code>"这是一个测试文件,用于测试异常!!"</code><code>)</code>
<code>except IOError:</code>
<code> </code><code>print </code><code>"Error:没有找到文件或文件不可写入"</code>
<code>else</code><code>:</code>
<code> </code><code>print </code><code>"文件写入成功"</code>
<code> </code><code>obj.close()</code>
<code>#python except.py </code>
<code>文件写入成功</code>
去掉logfile文件的写入权限,在测试一次
<code>user2@localhost:~$ </code><code>chmod</code> <code>-w logfile </code>
<code>user2@localhost:~$ ll</code>
<code>total 28</code>
<code>drwxr-xr-x 3 user2 user2 4096 Jul 27 18:58 aaaa</code>
<code>drwxr-xr-x 6 user2 user2 4096 Jul 20 09:18 demo</code>
<code>-rw-r--r-- 1 root root 265 Aug 11 11:21 except.py</code>
<code>-r--r--r-- 1 user2 user2 45 Aug 11 11:21 logfile</code>
<code>drwxr-xr-x 6 user2 user2 4096 Jul 10 13:32 </code><code>test</code>
<code>drwxr-xr-x 6 user2 user2 4096 Aug 3 18:50 YunboDBService</code>
<code>drwxr-xr-x 3 user2 user2 4096 Aug 3 09:58 zhouhai</code>
<code>user2@localhost:~$ python except.py </code>
<code>Error:没有找到文件或文件不可写入</code>
Python的异常类型:
<a href="http://s5.51cto.com/wyfs02/M02/85/AC/wKiom1er8QSDW2kMAAMTWpim6c0790.png" target="_blank"></a>
<a href="http://s2.51cto.com/wyfs02/M00/85/AB/wKioL1er8QazqY8OAALU2_p1KLs489.png" target="_blank"></a>
<a href="http://s5.51cto.com/wyfs02/M01/85/AC/wKiom1er8QjQOyLJAAKGz0pU5Yo034.png" target="_blank"></a>
如何捕获所有异常?
Python所有的标准异常都是exception的一个子类。
<code>>>> a = b =5</code>
<code>>>> try:</code>
<code>... print a*b+c</code>
<code>... except Exception, e:</code>
<code>... print e</code>
执行结果:
<code>name </code><code>'c'</code> <code>is not defined</code>
通过以上方法,不管发生何种类型的异常,都会被捕获到Exception中,但这也有一个弊端,就是无法知道程序究竟发生了何种异常情况。
try--finally语句:
try--finally语句无法是否发生异常都将执行最后的代码
<code>>>> a = b = 5</code>
<code>... print a*B+c</code>
<code>... finally:</code>
<code>... print a*b</code>
<code>...</code>
<code>name </code><code>'B'</code> <code>is not defined</code>
<code>25</code>
<a href="http://www.runoob.com/python/python-exceptions.html" target="_blank">http://www.runoob.com/python/python-exceptions.html</a>
本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1836814,如需转载请自行联系原作者