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"
  • 相关阅读:
    centos7.6安装Oracle11g过程记录(下)
    centos7.6 安装解压缩软件
    centos7.6 安装及配置ftp服务
    MySQL8.0的主从配置过程记录
    解决 /dev/mapper/centos-root 空间不足的问题
    ASP判断当前页面上是否有参数ID传递过来
    通过ASP禁止指定IP和只允许指定IP访问网站的代码
    asp自动补全html标签自动闭合(正则表达式)
    asp中utf8不会出现乱码的写法
    通过安全字符串过滤非法字符
  • 原文地址:https://www.cnblogs.com/haoshine/p/5777537.html
Copyright © 2011-2022 走看看