python编程进阶之异常处理用法实例分析

本文实例讲述了python异常处理用法。分享给大家供大家参考,具体如下:

之前用Java的时候,在容易出错的地方我们经常使用try…catch或者try…catch…finally来捕捉和显示异常,在python中很高兴地发现它也有这样的机制。

try..except

这个用于当异常出现的时候,用except从句来处理异常,而不至于程序自动退出。例如,在python里获取用户输入时,若用户输入文件结束符Ctrl-d,则会引发EOFError文件结束异常。我们使用try except来处理:

#!/usr/bin/python
# Filename: try_except.py
import sys
try:
  s = raw_input('Enter something --> ')
except EOFError:
  print '\nWhy did you do an EOF on me?'
  sys.exit() # exit the program
except:
  print '\nSome error/exception occurred.'
  # here, we are not exiting the program
print 'Done'

我们在运行程序的时候输入Ctrl-d:

$ python try_except.py
Enter something -->
Why did you do an EOF on me?

$ python try_except.py
Enter something --> Python is exceptional!
Done

可以看到,当遇到EOFERROR时,程序执行了except EOFError:中的内容。若出现其他异常,则会执行except:从句中的内容。except后面还可以加else从句,如果没有发生异常,则执行else从句中的内容。记住,首先,我们要导入sys模块!!

try.. catch

catch主要用于异常出现的时候抓取异常,方便显示异常信息。但是我还没有见别人用过,找不到例子~所以是不推荐用嘛?谁找到例子可以留言给我^.^

try.. finally

假如你在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。注意,在一个try块下,你可以同时使用except从句和finally块。如果你要同时使用它们的话,需要把一个嵌入另外一个。举个例子(还记得文件读写里的poem嘛):

#!/usr/bin/python
# Filename: finally.py
import time
try:
  f = file('poem.txt')
  while True: # our usual file-reading idiom
    line = f.readline()
    if len(line) == 0:
      break
    time.sleep(2)
    print line,
finally:
  f.close()
  print 'Cleaning up...closed the file'

输出:

$ python finally.py
Programming is fun
When the work is done
Cleaning up...closed the file
Traceback (most recent call last):
  File "finally.py", line 12, in ?
    time.sleep(2)
KeyboardInterrupt

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

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

用raise引发异常

我们可以使用raise语句 引发 异常,但要指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接子类。举个例子:

#!/usr/bin/python
# Filename: raising.py
class ShortInputException(Exception):
  '''A user-defined exception class.'''
  def __init__(self, length, atleast):
    Exception.__init__(self)
    self.length = length
    self.atleast = atleast
try:
  s = raw_input('Enter something --> ')
  if len(s) < 3:
    raise ShortInputException(len(s), 3)
  # Other work can continue as usual here
except EOFError:
  print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
  print 'ShortInputException: The input was of length %d, \
     was expecting at least %d' % (x.length, x.atleast)
else:
  print 'No exception was raised.'

输出:

$ python raising.py
Enter something -->
Why did you do an EOF on me?

$ python raising.py
Enter something --> ab
ShortInputException: The input was of length 2, was expecting at least 3

$ python raising.py
Enter something --> abc
No exception was raised.

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

在except从句中,我们提供了错误类和用来表示错误/异常对象的变量。这与函数调用中的形参和实参概念类似。当触发raise从句时,会调用对应的except从句执行,在这个例子中就引发了except ShortInputException,x 这个错误,类似于调用。

更多Python相关内容感兴趣的读者可查看本站专题:《Python入门与进阶经典教程》、《Python字符串操作技巧汇总》、《Python列表(list)操作技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • 浅谈Python的异常处理

    Python的异常处理能力是很强大的,可向用户准确反馈出错信息.在Python中,异常也是对象,可对它进行操作.所有异常都是基类Exception的成员.所有异常都从基类Exception继承,而且都在exceptions模块中定义.Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常.Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceba

  • python3 与python2 异常处理的区别与联系

    在python2.x中 ,异常是这样的处理的,异常基类后面加一个逗号" ,"  然后跟着异常类型 import traceback try: 1/0 except Exception , err: print err 在python3.x中,异常是这样处理的,基类通过关键 词"as" 连接异常类型 import traceback try: 1/0 except Exception as err: print(err) 以上就是本文的全部内容了,希望大家能够喜欢.

  • Python标准异常和异常处理详解

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 1.异常处理: 本站Python教程会具体介绍. 2.断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代

  • Python 异常处理的实例详解

    Python 异常处理的实例详解 与许多面向对象语言一样,Python 具有异常处理,通过使用 try...except 块来实现. Note: Python v s. Java 的异常处理 Python 使用 try...except 来处理异常,使用 raise 来引发异常.Java 和 C++ 使用 try...catch 来处理异常,使用 throw 来引发异常. 异常在 Python 中无处不在:实际上在标准 Python 库中的每个模块都使用了它们,并且 Python 自已会在许多不

  • Python中的错误和异常处理简单操作示例【try-except用法】

    本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常,并显示异常的详细信息. 在代码中添加错误检测及异常处理,只需要将代码封装在try-except语句中. try: try_suite except : except_suite ------------------------------------------------------------

  • Python异常处理总结

    本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行. ①.raise 语句 Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示: # -- coding: utf-8 -- def ThorwErr()

  • python中的五种异常处理机制介绍

    从几年前开始学习编程直到现在,一直对程序中的异常处理怀有恐惧和排斥心理.之所以这样,是因为不了解.这次攻python,首先把自己最畏惧和最不熟悉的几块内容列出来,里面就有「异常处理」这一项. <Dive into Python>并没有专门介绍异常处理,只是例子中用到的时候略微说明了一下.今天下载<Learn Python>,直接进异常处理这块.这一部分有四章,第一章讲解异常处理的一般使用方法,后面的章节深入地讨论其机制.我目前只看了第一章,先学会用,以后有必要的时候再扩展阅读. p

  • 深入理解python try异常处理机制

    深入理解python try异常处理机制 #python的try语句有两种风格 #一:种是处理异常(try/except/else) #二:种是无论是否发生异常都将执行最后的代码(try/finally) try/except/else风格 try: <语句> #运行别的代码 except <名字>: <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,获得附

  • Python中的异常处理try/except/finally/raise用法分析

    本文实例分析了Python中的异常处理try/except/finally/raise用法.分享给大家供大家参考,具体如下: 异常发生在程序执行的过程中,如果python无法正常处理程序就会发生异常,导致整个程序终止执行,python中使用try/except语句可以捕获异常. try/except 异常的种类有很多,在不确定可能发生的异常类型时可以使用Exception捕获所有异常: try: pass except Exception, e: print Exception, ":"

  • python编程进阶之异常处理用法实例分析

    本文实例讲述了python异常处理用法.分享给大家供大家参考,具体如下: 之前用Java的时候,在容易出错的地方我们经常使用try-catch或者try-catch-finally来捕捉和显示异常,在python中很高兴地发现它也有这样的机制. try..except 这个用于当异常出现的时候,用except从句来处理异常,而不至于程序自动退出.例如,在python里获取用户输入时,若用户输入文件结束符Ctrl-d,则会引发EOFError文件结束异常.我们使用try except来处理: #!

  • Python编程中的反模式实例分析

    本文实例讲述了Python编程中的反模式.分享给大家供大家参考.具体分析如下: Python是时下最热门的编程语言之一了.简洁而富有表达力的语法,两三行代码往往就能解决十来行C代码才能解决的问题:丰富的标准库和第三方库,大大节约了开发时间,使它成为那些对性能没有严苛要求的开发任务的首选:强大而活跃的社区,齐全的文档,也使很多编程的初学者选择了它作为自己的第一门编程语言.甚至有国外的报道称,Python已经成为了美国顶尖大学里最受欢迎的编程入门教学语言. 要学好一门编程语言实属不易,在初学阶段,就

  • python中引用与复制用法实例分析

    本文实例讲述了python中引用与复制用法.分享给大家供大家参考.具体分析如下: 在python中,任何不可变对象是传值的,而可变对象是传引用的. 不管是向函数传递参数或者是任何形式的对象复制来说,不可变对象(比如整数,字符串)被真正复制,而可变对象只是复制了一个对他们的引用,即在内存中只有一份对象,而引用两份.   a=b 这样的赋值,就会创建对b的引用,对于象数字和字符串这样的不可变的对象,这种赋值实际是创建了b的一个副本 >>> a='hello' >>> b=a

  • python开发之str.format()用法实例分析

    本文实例分析了python开发之str.format()用法.分享给大家供大家参考,具体如下: 格式化一个字符串的输出结果,我们在很多地方都可以看到,如:c/c++中都有见过 下面看看python中的字符串格式函数str.format(): #使用str.format()函数 #使用'{}'占位符 print('I\'m {},{}'.format('Hongten','Welcome to my space!')) print('#' * 40) #也可以使用'{0}','{1}'形式的占位符

  • Python编程之变量赋值操作实例分析

    本文实例讲述了Python编程之变量赋值操作.分享给大家供大家参考,具体如下: #coding=utf8 ''''' Python中主要通过等号(=)进行赋值. Python中的赋值不是直接将一个值赋给一个变量, 而是将该对象的引用(并不是值)赋值给变量. ''' #赋值运算符 Int=12 Float=12.2 String="hello" List=[1,2,"hell"] Touple=(4,"hell") Dictionary={'one

  • python中sys.argv参数用法实例分析

    本文实例讲述了python中sys.argv参数用法.分享给大家供大家参考.具体分析如下: 在学python的过程中,一直弄不明白sys.argv[]的意思,虽知道是表示命令行参数,但还是有些稀里糊涂的感觉. 今天又好好学习了一把,总算是大彻大悟了. Sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始,以下两个例子说明: 1.使用sys.argv[]的一简单实例 import sys,os os.system(sys.argv[1]) 这个例

  • Python XlsxWriter模块Chart类用法实例分析

    本文实例讲述了Python XlsxWriter模块Chart类用法.分享给大家供大家参考,具体如下: 一 点睛 Chart类是XlsxWriter模块中图表组件的基类,支持的图表类型包括面积.条形图.柱形图.折线图.饼图.散点图.股票和雷达等,一个图表对象是通过Workbook(工作簿)的add_chart方法创建,通过 {type,'图表类型'}字典参数指定图表的类型,语句如下: chart = workbook.add_chart({type, 'column'}) #创建一个column

  • Python爬虫之正则表达式基本用法实例分析

    本文实例讲述了Python爬虫之正则表达式基本用法.分享给大家供大家参考,具体如下: 一.简介 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列匹配某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些匹配某个模式的文本. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表

  • Python的高阶函数用法实例分析

    本文实例讲述了Python的高阶函数用法.分享给大家供大家参考,具体如下: 高阶函数 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字符串转为列表,元素类型为字符串类型,将其都变成数字类型,使用分布式思想[类似于一件事一个人干起来慢,但是如果人多呢?效率则可以相应的提高],同理,一台电脑处理数据比较慢,但是如果有100台电脑同时处理,则效率则会快很多,最终将每台电脑上处理的数据进行整合. python的优点:内

  • Python 类的魔法属性用法实例分析

    本文实例讲述了Python 类的魔法属性用法.分享给大家供大家参考,具体如下: 魔法属性 无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下: 1. doc 表示类的描述信息 class Foo: """ 描述类信息,这是用于看片的神奇 """ def func(self): pass print(Foo.__doc__) #输出:类的描述信息 2. module 和 class modu

随机推荐