python异常处理try/except/else/finally语句

  异常是指程序中的例外、违例情况,比如序列的下标越界、打开不存在的文件、空引用异常等。通过捕获异常并进行正确处理,可以提高程序的健壮性。如果没有代码处理异常,Python解释器将输出相关异常信息并终止程序。

  Python中处理异常是通过try/except/else/finally语句完成。它们的语法结构下:

try:
    Normal execution block
except A:
    Exception A handle
except B:
    Exception B handle
except:
    Other exception handle
else:
    if no exception,get here
finally:
     print("finally") 

  说明:

    1、try子句中的代码防止可能出现异常的语句。

    2、except子句为捕获异常时进行处理的逻辑。except A、except B中的语句表示捕获到异常为A、异常类型为B时针对性处理的逻辑。except表示除去异常类型A、B之外所有其他类型。

    3、else子句在try子句中代码执行未发生异常情况下执行。else语句为可选语句。

    4、finally子句无论try子句中是否发生异常都会被执行。常用于关闭因异常而不能释放的系统资源。finally子句为可选语句。

    5、注意上述try/except A/except B/except/else/finally语句的先后顺序,不能随意调换顺序。

  下面通过打开文件的案例来了解一下实现方法。

try:
    fp = open('ip.txt', 'r')
    ip_lst = fp.readlines()
except:
    print "%s file,please check." % ('ip.txt')
    sys.exit(1)

  利用try/except语句直接操作打开文件,而不是通过判断文件存在、文件类型来实现代码。程序中通过指定IOError异常类型来进行处理,其他异常报错"unkown error"。虽然程序针对异常进行处理,但是并没有显示关闭被打开的文件资源。修改后的代码如下:

try:
    fp = open('ip.txt', 'r')
    ip_lst = fp.readlines()
except:
    print "%s file,please check." % ('ip.txt')
    sys.exit(1)finally:
    fp.close()

  在ip.txt文件不存在情况下执行代码,程序异常中断,提示“NameError: name 'fp' is not defined”。原因是因为try语句中定义的变量的作用域导致的。变量fp只在try语句中有效,属于局部变量。因此,为了使变量fp具有全局性。可以使用try/except语句嵌套的方式完成。修改后的代码如下:

try:
    fp = open('ip.txt', 'r')
    try:
        ip_lst = fp.readlines()
    except:
        print "read %s fail" % ('ip.txt')
        sys.exit()
    finally:
        print "call internal finall close file"
        fp.close()
except:
    print "%s file,please check." % ('ip.txt')
    sys.exit(1)

  说明:如果要在某个代码块中使用同一级其他代码块中定义的变量,可以考虑嵌套的方式或全局变量方式实现。

猜你喜欢

转载自www.cnblogs.com/linyfeng/p/8970554.html