zoukankan      html  css  js  c++  java
  • Python——异常基础

    异常基础
    在Python中,异常会依据错误自己主动地被触发。也能由代码触发和截获。异常由五个语句处理:

    1.【try/except】:捕捉由Python或你引起的异常并恢复。
    2.【try/finally】:不管异常是否发生,运行清理行为。


    3.【raise】:手动在代码中触发异常。
    4.【assert】:有条件地在程序代码中触发异常。


    5.【with/as】:在Python2.6和兴许版本号中实现环境管理器

    异常通常能够用于各种用途。

    以下是它最常见的几种角色:

    1.错误处理:每当在执行时检測到程序错误时,Python就会引发异常,能够在代码中捕捉和对应错误。或者忽略已发生的异常。
    2.事件通知:异常也可用于发出有效状态的信号,而不需在程序间传递结果标志位,或者刻意对其进行測试。
    3.特殊情况处理:有时,发生了非常罕见的情况。非常难调整代码去处理,一般会在异常处理器中处理这些罕见的情况,从而省去应对特殊情况的代码。
    4.终止行为:try/finally语句可确保一定会进行须要的结束运算。不管程序中是否有异常。


    5.很规控制流程
    -----------------------------------------------------------------------------------------------------------------------------------
    默认异常处理器

    如果编写以下的函数:

    >>> def fetcher(obj,index):
    	return obj[index]
    正常运算中。它将返回合法的索引值的结果:
    >>> x = 'spam'
    >>> fetcher(x,3)
    'm'
    然而,若索引指向字符串末尾以后的位置,就会引发异常。Python会替序列检測到超出边界的索引运算,并通过【抛出】内置的IndexError异常进行报告。

    >>> fetcher(x,4)
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        fetcher(x,4)
      File "<pyshell#2>", line 2, in fetcher
        return obj[index]
    IndexError: string index out of range
    由于我们的代码没有能够捕捉这个异常。所以它将会一直向上返回到程序顶层,并启用【默认的异常处理器】:就是打印标准出错消息。

    -----------------------------------------------------------------------------------------------------------------------------------
    捕获异常
    只是,在有些情况下。这并非我们想要的。比如,server程序一般须要在内部发生错误时依旧保持工作。

    假设不想要默认的异常行为。就须要把调用包装在try语句内。自行捕捉异常。


    >>> 
    try:
    	fetcher(x,4)
    except IndexError:
    	print('got exception')
    
    	
    got exception
    如今,当try代码块运行时触发异常。Python会自己主动跳至处理器(指出引发的异常名称的except分句以下的代码块)。

    在实际的程序中。try语句不仅会捕获异常,也会从中恢复运行:

    >>> def catcher():
    	try:
    		fetcher(x,4)
    	except IndexError:
    		print('got exception')
    	print('continuing')
    
    	
    >>> catcher()
    got exception
    continuing
    这次,在异常捕捉和处理后。程序在捕捉了整个try语句后继续执行:这就是得到“continuing”消息的原因。我们没有看见标准出错消息,而程序也将正常执行下去。
    ============================================================================

    用户定义的异常
    用户定义的异常可以通过类编写,它继承自一个内置的异常类:通常这个类的名称叫做Exception。


    >>> class Bad(Exception):
    	pass
    
    >>> def doomed():
    	raise Bad()
    
    >>> 
    try:
    	doomed()
    except Bad:
    	print('Got Bad')
    
    	
    Got Bad

    ============================================================================

    终止行为
    最后。try语句能够包括finally代码块,这能够定义一定会在最后运行时的收尾行为,不管try代码块中是否发生了异常。
    >>> 
    try:
    	fetcher(x,3)
    finally:
    	print('after fetch')
    
    	
    'm'
    after fetch
    在这里,假设try代码块完毕后没有异常,finally代码块就会运行,而程序会在整个try后继续下去。


    在之后将会看到,在使用某些类型的对象的时候,Python2.6和Python3提供了try/finally的一种替代。

    with/as执行一个对象的环境管理逻辑,来确保终止行为的发生:

    >>> with open('test.txt','w') as file:
    	file.write('The night!')



  • 相关阅读:
    「翻译」Unity中的AssetBundle详解(二)
    「翻译」Unity中的AssetBundle详解(一)
    [翻译]理解Unity的自动内存管理
    Unity3D集成腾讯语音GVoice SDK
    Unity插件之Unity调用C#编译的DLL
    最好用的Unity版本控制工具
    常见算法 php实现
    inotify+rsync实现文件双向实时同步
    30道Redis面试题
    mysql规范
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7040755.html
Copyright © 2011-2022 走看看