异常

一、异常

1. 定义

  • 程序在运行过程中产生的错误

2. 结构

  • 产生异常:python解释器调用代码,出现错误,系统自动产生一个异常对象,并把错误返回给调用方
  • 捕获异常:通过try...except可以对系统产生的异常进行捕获
  • 处理异常:如果except捕获到了相对应的异常,则在except代码块里处理异常,否则python解释器将错误返回调用者
  • 别名:指接收到的异常对象

 

try:
    代码块
except 异常名称 as 别名: 
    代码块
except 异常名称 as 别名:
    代码块
...
else:
    不产生异常时执行这里的代码
finally:
    不管有无异常,都执行这里的代码

 3. Exception

    Exception是所有异常的基类。换句话说,所有的错误都是Exception的子类对象。

二、抛出异常(raise)

import traceback


def cul(a, b):
    if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
        return a + b
    else:
        raise Exception("参数数据类型有误")

try:
    print(cul(1, "a"))
except Exception as e:
    print(e)  # 参数数据类型有误
    print(traceback.format_exc())  # 获取堆栈信息
    print("出现了错误")  # 出现了错误


# print(traceback.format_exc())结果:
Traceback (most recent call last):
  File "E:/python_个人/day 019/临时.py", line 11, in <module>
    print(cul(1, "a"))
  File "E:/python_个人/day 019/临时.py", line 8, in cul
    raise Exception("参数数据类型有误")

 

三、自定义异常(慎用

  • 自定义一个类,并继承Exception类,类中内容全部继承Exception。就自定义了一个异常
  • 名字须符合规范
class GenderError(Exception):
    pass


class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender


def gender_judge(obj):
    if obj.gender != "":
        raise GenderError("性别不对")


p1 = Person("Tom", "")
p2 = Person("Linda", "")

try:
    gender_judge(p1)
    gender_judge(p2)
except GenderError as e:
    print(e)  # 性别不对

 

posted @ 2018-11-12 17:11  Ethan_Y  阅读(289)  评论(0编辑  收藏  举报