异常机制

     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))

 

     

posted on 2022-03-25 15:44  溪水静幽  阅读(34)  评论(0)    收藏  举报