`
0428loveyu
  • 浏览: 30930 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Python异常处理

 
阅读更多
异常处理的能力是一门语言好坏的重要特征。python也提供了强大的异常处理功能,如下面介绍。
1. try...except :
try:
    #raise NameError
    pass
except NameError:
    # code to be executed when NameError occurred
    pass
except ValueError:
    # code to be executed when NameError occurred
    pass

上述代码的执行规则如下:
首先,执行try语句中的语句。
如果在执行的过程中出现异常,则立即停止try语句的执行,执行异常处理或者停止执行(异常没有处理)
发生异常后,将异常类型按顺序与except语句中的异常匹配,如果匹配成功,执行对应的异常处理。如果匹配不成功。将异常传递给更高一级的try语句,如果异常一直未找到处理程序则停止执行,抛出异常信息。
执行流程图如下:


有几点需要注意:
  • 出现异常时一旦类型匹配成功,就执行该类型对应的异常处理。此后不再继续匹配,也就是说最多(不匹配时不执行)只有一个异常处理代码块被执行。
  • 一个except语句可以处理多种类型(组成元组)的异常,格式如下: except (RuntimError, TypeError, NameError):
  • except中可以引用异常的实例, except NameError as inst : 或者 except NameError, inst .如果出现NameError异常,err就是这个异常的实例。可以操作这个实例的方法或者属性获得更多的异常信息。
例如:
try:
    raise Exception('spam', 'eggs')
except Exception as inst :
    print(type(inst))   #<class 'Exception'>
    print(inst.args)    #(argument tuple)
    print(inst)          # 

这段代码中,抛出异常时我们传递了两个参数 spam和eggs,这两个参数被组成一个元组,存储在异常实例的args属性中,因此print inst.args将输出(‘spam’, 'eggs').由于这个异常实例定义了__str__方法,所以可以直接将它输出,输出结果与print inst.args一样。如果一个传递了参数的异常没有被处理,那么在抛出的异常信息最后一部分会是所传递的参数。假设上面抛出的异常没有处理(即去掉except语句),则输出的异常信息最后一部分是:Exception: ('spam', 'eggs')

2. try ... except ... else:
else语句是可选的,它在没有出现异常的时候被执行。也就是说,try语句没有异常时,执行else语句。try语句出现异常时,按照1中的规则执行,忽略else语句。

3. try...finally
try:
    #You do your operations here;
    pass
    #Due to any exception, this may be skipped.
finally:
    pass
    #This would always be executed.


在这种情形中,finally语句总会被执行,无论try是否出现异常。
下面是一个很好的例子:

try:
    fh = open("testfile", "w")
    try:  
        fh.write("This is my test file for exception handling!!")
    finally:
        fh.close()
except IOError:
    print("Error: can\'t find file or read data")
else :
    print("Everything goes well")



上述代码中,在执行内部try语句时,写完文件之后,finally一定会被执行,也就是文件一定会关闭。这段代码中有两处可能出现异常,open和write。如果在open出现异常,内部try不被执行,直接进行异常处理输出“Error: can\'t find file or read data”。如果open不出现异常,继续执行内部try,无论内部try是否出现异常close总会被执行。内部try出现异常,由于内部try没有except语句,所以异常被传递给外部try语句,匹配IOError成功,执行异常处理,输出“Error: can\'t find file or read data”。不出现异常的时候,执行else语句。
另一个例子:
def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("division by zero!")
    else:
        print("result is", result)
    finally:
        print("executing finally clause")


执行divide(2, '2')时,结果如下:
executing finally clause
Traceback (most recent call last):
File "D:\eclipse\workspace\python\exception\try_exception.py", line 11, in <module>
divide(2,'2')
File "D:\eclipse\workspace\python\exception\try_exception.py", line 3, in divide
result = x / y
TypeError: unsupported operand type(s) for /: 'int' and 'str'

4. raise 抛出异常
除了程序运行时出现异常外,我们也可以人为地抛出任意类型的异常。e.g:
raise NameError("TEST")
raise后面只能跟着一个异常。这个异常可是是异常类,也可是是异常实例。
如果你只想知道是否出现异常,不想去处理异常,有一种方法可以重新抛出异常:
try:
    raise NameError("Hello")
except NameError:
    print "a NameEerror occurs"
    raise


这段代码执行结果如下:
a NameEerror occurs

Traceback (most recent call last):
File "<pyshell#1>", line 2, in <module>
raise NameError("Hello")
NameError: Hello


5. 自定义异常
python允许程序员通过继承内置的异常类型来定制自己的异常类型。
class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)
try:
    raise MyError(4)
except MyError as inst:
    print("opps, MyError occurred, value:", inst.value)


这段代码执行结果为:opps, MyError occurred, value: 4
自定义异常类型的时候,尽量保持简单,提供有效的异常信息即可。

以上几点只是简单介绍,详细内容请参考官方文档。










分享到:
评论

相关推荐

    Python异常处理(课件)

    常见的Python异常包括IndexError(索引超出范围)、TypeError(操作符或函数应用于不兼容的类型)、KeyError(访问字典中不存在的键)、ValueError(值错误,如将非数字字符串转换为整数)、NameError(使用了未定义...

    15.python异常处理1

    "Python 异常处理" Python 是一种高级编程语言,它提供了一个强大的异常处理机制,以便开发者能够更好地处理程序中的错误和异常。在 Python 中,异常是一种特殊的对象,它可以在程序执行过程中抛出,以便通知开发者...

    精通Python异常处理:自定义异常类的定义与实践

    自定义异常类是Python异常处理机制的一个重要组成部分。通过定义自定义异常类,你可以创建更清晰、更易于维护的代码,并提供更详细的错误信息。本文介绍了如何定义自定义异常类,以及如何在程序中使用它们。希望这些...

    Python:Python异常处理与调试

    ### Python异常处理与调试 #### 一、Python异常基础 ##### 1.1 异常的概念 在Python编程中,**异常**是一种用于处理程序运行时错误的机制。当程序遇到无法处理的情况时(例如除数为零、文件不存在、网络连接失败...

    知识笔记:Python异常处理(七)

    内容概要:本文详细介绍了 Python 中的异常处理机制,包括什么是异常、为何需要捕获异常以及具体的捕获方法(如捕获常规异常、特定异常、多种异常)、其他异常用法(如打印异常信息、else 子句和 finally 子句)和...

    Python异常处理.docx

    Python异常处理

    python异常处理学习.docx

    Python 异常处理学习 Python 异常处理是 Python 编程语言中的一种错误处理机制,用于捕捉和处理程序中出现的异常情况。Python 中的异常处理可以分为两种:try-except 语句和 try-finally 语句。 try-except 语句的...

    Python 异常处理、异常名称及实例.docx

    Python异常处理是编程中至关重要的一个部分,它允许程序员优雅地处理程序运行时可能出现的错误情况,而不是让程序突然崩溃。异常是程序在执行过程中遇到的错误,它们是Python对象,表示程序运行中的异常状态。当...

    对于Python异常处理慎用“except:pass”建议

    翻译自StackOverflow中一个关于Python异常处理的问答。 问题:为什么“except:pass”是一个不好的编程习惯? 我时常在StackOverflow上看到有人评论关于except: pass的使用,他们都提到这是一个不好的Python编程习惯...

    Python异常处理函数和模块学习教案.pptx

    Python异常处理函数和模块学习教案.pptx

    完整图文版教程 优质的Python基础入门教程 讲解清晰 PPT课件 15、Python异常处理 (共30页).rar

    Python异常处理是编程中至关重要的一个环节,它允许程序员优雅地处理程序运行时可能出现的错误,确保程序在遇到问题时不会突然崩溃。本教程通过30页的PPT课件,详细介绍了Python中的异常处理机制,帮助初学者掌握这...

    完整图文版教程 优质的Python基础入门教程 讲解清晰 PPT课件 15、Python异常处理 (共30页).pptx

    Python异常处理是编程中至关重要的一个部分,它允许程序员优雅地处理程序运行时可能出现的错误,防止程序因未预期的状况而突然终止。在Python中,异常是通过异常对象来表示的,这些对象通常是在遇到错误时自动创建的...

    Python异常处理函数和模块PPT学习教案.pptx

    Python异常处理是编程中至关重要的一个部分,它允许程序员优雅地处理程序运行时可能出现的错误。在Python中,异常是程序执行过程中导致流程中断的事件。这些异常可能是由于语法错误、除以零、文件未找到等操作引起的...

    python异常处理(csdn)————程序.pdf

    Python 异常处理是编程中不可或缺的一部分,它允许我们在代码执行过程中捕获并处理可能出现的错误,从而确保程序的稳定性和健壮性。本文将详细解释如何使用 `try...except` 结构,以及如何通过 `else` 和 `finally` ...

    Python异常处理详解:掌握错误处理的艺术

    Python提供了一套完整的异常处理机制,允许开发者捕获和处理程序运行时发生的错误。通过合理地使用异常处理,可以提高程序的用户体验和错误容忍度。本文将详细介绍Python中的异常处理机制,包括异常的捕获、处理、抛...

    Python 异常处理的实例详解

    ### Python异常处理详解 #### 一、Python异常处理概述 Python是一种高级编程语言,它具有丰富的面向对象特性,包括强大的异常处理机制。异常处理在Python中是非常重要的一个方面,它可以帮助程序员有效地处理程序...

    Python异常处理(markdown文档教程).md

    Python异常处理(markdown文档教程).md

    python异常处理.html

    什么是异常处理?什么情况下会发生异常?了解常见异常类,异常处理的语句,try ... except,多个except语句和一个except块

Global site tag (gtag.js) - Google Analytics