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)