zoukankan      html  css  js  c++  java
  • Python try/except/finally

    举例说明一下try/except/finally的用法。

    若不使用try/except/finally

    1 x = 'abc'
    2 def fetcher(obj, index):
    3     return obj[index]
    4 
    5 fetcher(x, 4)

    输出:

      File "test.py", line 6, in <module>
        fetcher(x, 4)
      File "test.py", line 4, in fetcher
        return obj[index]
    IndexError: string index out of range

    使用try/except/finally:

    第一: try不仅捕获异常,而且会恢复执行

    1 def catcher():
    2     try:
    3         fetcher(x, 4)
    4     except:
    5         print "got exception"
    6     print "continuing"

    输出:

    got exception
    continuing

    第二:无论try是否发生异常,finally总会执行

    1 def catcher():
    2     try:
    3         fetcher(x, 4)
    4     finally:
    5         print 'after fecth'

    输出:(这里没用except,即没有在异常发生时的处理办法,就按python默认的方式来对待异常发生,故程序会停下来)

    after fecth
    Traceback (most recent call last):
      File "test.py", line 55, in <module>
        catcher()
      File "test.py", line 12, in catcher
        fetcher(x, 4)
      File "test.py", line 4, in fetcher
        return obj[index]
    IndexError: string index out of range

    第三:try无异常,才会执行else

    有异常的情况

    1 def catcher():
    2     try:
    3         fetcher(x, 4)
    4     except:
    5         print "got exception"
    6     else:
    7         print "not exception"

    输出:

    got exception  

    没异常的情况:

    1 def catcher():
    2     try:
    3         fetcher(x, 2)
    4     except:
    5         print "got exception"
    6     else:
    7         print "not exception"

    输出:

    not exception  

    else作用:没有else语句,当执行完try语句后,无法知道是没有发生异常,还是发生了异常并被处理过了。通过else可以清楚的区分开。

    第四:利用raise传递异常

    1 def catcher():
    2     try:
    3         fetcher(x, 4)
    4     except:
    5         print "got exception"
    6         raise

    输出:

    got exception
    Traceback (most recent call last):
      File "test.py", line 37, in <module>
        catcher()
      File "test.py", line 22, in catcher
        fetcher(x, 4)
      File "test.py", line 4, in fetcher
        return obj[index]
    IndexError: string index out of range

    raise语句不包括异常名称或额外资料时,会重新引发当前异常(即发生了异常才进入except内的异常)。如果希望捕获处理一个异常,而又不希望异常在程序代码中消失,可以通过raise重新引发该异常。

    第五:except(name1, name2)

    1 def catcher():
    2     try:
    3         fetcher(x, 4)
    4     except(TypeError, IndexError):
    5         print "got exception"
    6     else:
    7         print "not exception"

    捕获列表列出的异常,进行处理。若except后无任何参数,则捕获所有异常。

    1 def catcher():
    2     try:
    3         fetcher(x, 4)
    4     except:
    5         print "got exception"
  • 相关阅读:
    loaded the "*****" nib but the view outlet was not set 错误的解决办法。
    IBOutlet和IBAction
    initWithNibName 和 loadNibNamed 的区别
    iOS 应用是如何创建的
    Objective C中NULL、Nil、nil、NSNull 的区别
    Objective C数组的内存管理
    XCode 调试1
    META httpequiv 大全
    基于GoogleMap,Mapabc,51ditu,VirtualEarth,YahooMap Api接口的Jquery插件的通用实现(含源代码下载) 转
    SELECT 語法中,如何動態組合查詢條件(转)
  • 原文地址:https://www.cnblogs.com/haoshine/p/5777537.html
Copyright © 2011-2022 走看看