异常机制
python 用 异常对象(exception object)来表示异常情况。异常对象可以被处理、捕获,避免程序终止执行
Exception 所有异常的基类
AttributeError 特征引用或者赋值失败时引发的
IOError 试图打在不存在的文件(包括其他情况)
IndexError 使用序列中不存在的索引
KeyError 使用映射中不存在的键
NameError 找不到名字(变量)
SyntaxError 在代码为错误形式时引发
SystemExit 系统异常退出
TypeError 在内建操作或者函数应用与错误类型的对象时
ValueError 正确的类型对象,但是对象使用不合适的值
ZeroDivisionError 除法,第二参数为0
创建一个新的exception类来拥有自己的异常。异常应该继承自 Exception 类,或者直接继承,或者间接继承
class MyError(Exception): pass
基本形式
try: 需要执行的操作 except 异常类 as e: 如果发生异常,执行以下代码 else: 如果没有发生异常,执行的命令 finally: 无论如何,都要执行的代码
- 注意 except as e 的写法,e 是一个变量,记录了异常的类,可以用 print 函数打印出来
- except 后面的异常类,建议写 Exception,这样就一定能捕获到异常。
捕获到异常,就不会去执行 else 模块
示例
try: name = input('Please input your name: ') print('Hello %s' %name) print(10/0) except Exception as e: print('Got an error ', e) finally: print('Game over')
捕获多个异常
try: 需要执行的操作 except 异常类 as e: 如果发生异常,执行以下代码 except 异常类 as f: 如果发生异常,执行以下代码 else: 如果没有发生异常,执行的命令 finally: 无论如何,都要执行的代码
- except 后面的异常类,如果无需指定,直接写 Exception 即可。
- 如果需要明确指定异常的类,而且是多个类的情况下,可以使用多个 except 语句。
try: 需要执行的操作 except (异常类1,异常2,异常3) as e: 如果发生异常,执行以下代码 else: 如果没有发生异常,执行的命令 finally: 无论如何,都要执行的代码
抛出异常
raise 关键字可以自主抛出异常,规则如下:
raise NameError([str])
1、raise: 单独一个raise。该语句引发当前上下文中捕获的异常(比如except块中)或默认引发RuntimeError异常。
2、raise异常名称:raise后带一个异常类名称,表示引发执行类型的异常。
3、raise异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。
try: a = input("输入一个数:") # 判断用户输入的是否为数字 if (not a.isdigit()): raise ValueError("a 必须是数字") except ValueError as e: print("引发异常:", repr(e))
自定义异常
自定义一个异常类,通常应继承自Exception类(直接继承)
class BusinessError(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return "{}".format(repr(self.msg)) def req_op(): try: raise BusinessError("game over") except BusinessError as e: print("{}".format(e))
立志如山 静心求实
浙公网安备 33010602011771号