python 异常处理

系统异常

语法:try/except/else/finally

1、try/except/else 结构可以清晰的描述出哪些异常会由自己的代码来处理、哪些异常会传播到上一级。如果try块没有异常发送,那么就执行else块。 有了else块,我们可以尽量缩减try块内的代码量,使其更加易读。

import json

def load_json_key(data, key):
    try:
        result_dict = json.loads(data)
    except ValueError as e:
        raise KeyError from e
    else:
        return result_dict[key]

2、try/except/else/finally 结构; 这种写法很有用,因为这四块代码相互配合,即使try或者else中发生异常,finally块中关闭文件句柄的代码依然能够执行。

def open_file(path):
    file_obj = open(path, "r")
    try:
        data = file_obj.readlines()
    except IOError as e:
        raise IOError from e
    else:
        for line in data:
            print(line)
    finally:
        file_obj.close()

 

自定义异常(raise主动抛出错误)

实际上,每个error都是一个类,

class AlexError(Exception):
    def __init__(self, msg):
        self.message = msg

try:
    raise AlexError("Alex的异常")
except AlexError as e:
    print(e)

 

posted @ 2017-03-11 14:09  Vincen_shen  阅读(162)  评论(0)    收藏  举报