码迷,mamicode.com
首页 > 编程语言 > 详细

《python基础教程》笔记之 异常

时间:2015-03-09 12:27:52      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

  • 按自己的方式出错

使用raise语句引发一个异常,可以使用一个类(应该是Exception的子类)或者实例参数来作为raise的引发对象。使用类时,程序会自动创建实例,如

>>> raise Exception(‘hyperdrive overload‘)

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    raise Exception(‘hyperdrive overload‘)
Exception: hyperdrive overload

  • 捕捉异常

可以使用try/except实现捕捉异常,如

try:
    x = input(":")
    y = input(":")
    print x/y
except ZeroDivisionError:
    print "hello exception"
#结果如下:
>>> 
:10
:2
5
>>> 
:1
:0
hello exception

再次引发异常,如

class MuffledCalculator:
    muffled = False
    def calc(self, expr):
        try:
            return eval(expr)
        except ZeroDivisionError:
            if self.muffled : #如果屏蔽标志开启,则处理异常
                print "Division by zero is illegal"
            else:#如果屏蔽标志未开启,则再次引发异常
                raise
#结果如下:
>>> clc = MuffledCalculator()
>>> clc.calc(10/2)
5
>>> clc.calc(10/0) #没有屏蔽

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    clc.calc(10/0) #没有屏蔽
  File "E:\work\Code\python\test.py", line 137, in calc
    return eval(expr)
  File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> clc.muffled = True
>>> clc.calc(10/0) #有屏蔽
Division by zero is illegal

except后面不带参数可以捕捉所有的异常, 可以通过在ty/except后加一个except语句或者在except语句中用元组将多个异常类型列出来实现捕捉多个异常,如下:

try:
    x = input(":")
    y = input(":")
    print x/y
except (ZeroDivisionError, TypeError), e:
    print e
#结果如下
>>> 
:10
:0
integer division or modulo by zero

 在ty/except后加一个else语句可以在没有引发异常的情况下执行一些语句,如

while True:
    try:
        x = input(":")
        y = input(":")
        print x/y
    except Exception,e:
        print e
    else :
        print "Ah,.... it successed"
        break
#结果
>>>
:10
:0
integer division or modulo by zero
:10
:2
5
Ah,.... it successed

finally子句 -- finally子句肯定会被执行,不管try子句中是否发生异常,主要用于关闭文件或者网络套接字。

《python基础教程》笔记之 异常

标签:

原文地址:http://www.cnblogs.com/qiantangbanmu/p/4323065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!