python中的错误和异常处理

使用try except处理异常

try:
    print 10 / 0
except ZeroDivisionError, e:
    print "catched a ValueError:",e

上面的代码中,被除数是0,会引发ZeroDivisionError,运行上面的代码:

catched a ValueError: integer division or modulo by zero

使用try except处理多个异常

如果一段代码可能跑出多个异常,try except也是可以处理的, 下面代码用来读取一个文件,并转换成整型输出

try:
    f = open("d:/num.txt")
    line = f.read(2)
    num = int(line)
    print "read num=%d" % num
except IOError, e:
    print "catch error==:", e
except ValueError, e:
    print "catch error==:", e

如果文件不存在,会捕捉到下面异常:

catch error==: [Errno 2] No such file or directory: 'd:/num.txt'

另外,如果读取的字符串不能转换成整型,则会捕捉到ValueError

catch error==: invalid literal for int() with base 10: 'd3'

使用try-except-else捕获异常

try:
    ....
except:
    ....
else:
    ....

如果没有异常,执行else中的代码

try:
    f = open("d:/num.txt")
    line = f.read(2)
    num = int(line)
    print "read num=%d" % num
except IOError, e:
    print "catch error==:", e
except ValueError, e:
    print "catch error==:", e
else:
    print "no error happend"  

此时,执行效果如下:
这里写图片描述

try-finally捕获异常

try:
    try_code
finally:
    do_finally

上面的try–finally按照如下规则执行:

  • 如果try语句没有捕获错误,do_finally代码执行
  • 如果try语句捕获错误,程序首先执行do_finally语句,然后将捕获到的错误交给python解释器处理
try:
    f = open("d:/num.txt")
    line = f.read(2)
    num = int(line)
    print "read num=%d" % num
except IOError, e:
    print "catch error==:", e
finally:
    print "f close()"
    f.close()

上面的程序,当读取到非法字符串时候,此时转换成整型会出错,此时finally语句块先执行,然后,将异常交给python解释器处理
这里写图片描述

使用try-except-else-finally

try:
    try_code
except:
    except_code
else:
    else_code
finally:
    finally_code

上面的代码块会按照下面的规则来执行:

  • 若try语句没有捕获异常,执行完try代码段后,执行else代码段,最后执行finally
  • 若try捕获异常,首先执行except处理错误然后finally

with语句

with context [as var]:
    with_code
  • with语句用来代替try-except-finally语句
  • context表达式返回是一个对象
  • var用来保存context返回对象,单个返回值或者元组
  • with_code使用var变量来对context返回对象进行操作
with open("d:/num.txt") as f:
    for line in f.read():
        print line
print "f is closed :",f.closed

此时运行效果如下:
这里写图片描述

使用raise语句抛出异常

自定义异常

class FileError(IOError):
    pass

try:
    raise FileError, "this is a fileerror"
except FileError, e:
    print e

此时运行会打印如下:

this is a fileerror

猜你喜欢

转载自blog.csdn.net/mockingbirds/article/details/64501329