zoukankan      html  css  js  c++  java
  • 《python基础教程》笔记之 异常

    • 按自己的方式出错

    使用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:workCodepython	est.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子句中是否发生异常,主要用于关闭文件或者网络套接字。

  • 相关阅读:
    博客园CSS备份5
    博客园界面自定义教程
    awk 入门教程(阮一峰)
    批量检查cksum是否一致
    linux文件批量重命名
    cipher block
    riscv-gdbserver
    rsa_gmp
    asic
    video
  • 原文地址:https://www.cnblogs.com/qiantangbanmu/p/4323065.html
Copyright © 2011-2022 走看看