当你的程序中出现某些 异常的 状况的时候,异常就发生了。例如,当你想要读某个文件的时候,而那个文件不存在。或者在程序运行的时候,你不小心把它删除了。上述这些情况可以使用异常来处理。

假如你的程序中有一些无效的语句,Python会引发并告诉你那里有一个错误,从而处理这样的情况。考虑一个简单的print语句。假如我们把print误拼为Print,注意大写,这样Python会 引发一个语法错误。

我们可以观察到有一个SyntaxError被引发,并且检测到的错误位置也被打印了出来。这是这个错误的 错误处理器 所做的工作。

ValueError 数据不符合期望的格式(split()函数在s t ri n g中没有找到分隔符)

try:

  role, words = line.split(':',1)

except ValueError:

  pass

IOEError 数据无法正常访问(如文件被移走或重命名)

try:

  fdata = open("test.txt",'w')

  fmiss = open("est.txt",'w')

  pirnt fmiss.readline()

except IOEError as err:

  print "File error:" + str(err)

finally:

  if 'fdata' in locals():

    fdata.close()

  if 'fmiss' in locals():

    fmiss.close()

用with处理文件,就不用操心文件的关闭

try:

  with open('test.txt','w') as fdata, open('est.txt','w') as fmiss:

    print >>fdata,"Hello"

except IOEError as err:

  print 'file error:' + str(err)

try..except


我们尝试读取用户的一段输入。按Ctrl-d,看一下会发生什么。

>>> s = raw_input('Enter something --> ')
Enter something --> Traceback (most recent call last):
  File "<stdin>", line 1, in ?
EOFError

Python引发了一个称为EOFError的错误,这个错误基本上意味着它发现一个不期望的 文件尾 (由Ctrl-d表示)

接下来,我们将学习如何处理这样的错误。

处理异常


我们可以使用try..except语句来处理异常。

我们把所有可能引发错误的语句放在try块中,然后在except从句/块中处理所有的错误和异常。except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理 所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。

如果某个错误或异常没有被处理,默认的Python处理器就会被调用。它会终止程序的运行,并且打印一个消息,我们已经看到了这样的处理。

你还可以让try..except块关联上一个else从句。当没有异常发生的时候,else从句将被执行。

我们还可以得到异常对象,从而获取更多有个这个异常的信息。这会在下一个例子中说明。

引发异常


你可以使用raise语句引发异常。你还得指明错误/异常的名称伴随异常触发的异常对象。你可以引发的错误或异常应该分别是一个ErrorException类的直接或间接导出类

这里,我们创建了我们自己的异常类型,其实我们可以使用任何预定义的异常/错误。这个新的异常类型是ShortInputException类。它有两个域——length是给定输入的长度,atleast则是程序期望的最小长度。

except从句中,我们提供了错误类和用来表示错误/异常对象的变量。这与函数调用中的形参和实参概念类似。在这个特别的except从句中,我们使用异常对象的lengthatleast域来为用户打印一个恰当的消息。

try..finally


假如你在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。

注意,在一个try块下,你可以同时使用except从句和finally。如果你要同时使用它们的话,需要把一个嵌入另外一个。

我们进行通常的读文件工作,但是我有意在每打印一行之前用time.sleep方法暂停2秒钟。这样做的原因是让程序运行得慢一些(Python由于其本质通常运行得很快)。在程序运行的时候,按Ctrl-c中断/取消程序。

我们可以观察到KeyboardInterrupt异常被触发,程序退出。但是在程序退出之前,finally从句仍然被执行,把文件关闭

from: http://www.cnblogs.com/wei-li/archive/2012/03/26/2417314.html

最新文章

  1. CentOS安装Redis
  2. 对石家庄铁道大学官网UI设计的分析
  3. Java:IO流之字符流缓冲区详解
  4. Yii中Ajax的使用,如收藏功能
  5. requirejs 合并方案
  6. 502 Proxy Error。The ISA Server denied the specified Uniform Resource Locator (URL).
  7. Dynamic Performance Tables not accessible Automatic Statistics disabled for this session
  8. Eclipse中代码提示框的背景色修改
  9. 猴子吃桃问题(南阳ACM324)
  10. phpstorm使用之——常用快捷键
  11. sqlserver存储过程及临时表在统计中的应用
  12. U盘无法安装win10提示Your PC/Device needs to be repaired
  13. pm2,部署nodejs,使用方法及自己使用后总结的经验
  14. Linux Install geoip
  15. JavaScript初探四
  16. 【LDA】线性判别式分析
  17. [转]MySQL DATE_FORMAT() 函数
  18. poj 2486 Apple Tree (树形背包dp)
  19. Ubuntu 12.04 安装 vsftpd
  20. 上楼梯问题(递归C++)

热门文章

  1. 【Codeforces】113 D. Museum
  2. 【LOJ】#2289. 「THUWC 2017」在美妙的数学王国中畅游
  3. CentOS7安装和配置mongodb3.6
  4. Bootstrap--响应式显示图片信息列表
  5. vim选中多行复制粘贴
  6. CIDR的IP地址的表示与划分方法
  7. 深入理解Git - Git底层对象
  8. Maven项目使用阿里云的Maven库
  9. 自定义JSP标签示例
  10. Python中 *args 和 **kwargs 的区别