异常处理


1.语法格式

a = input("请输入被除数")
b = input("请输入除数")
try:
    a=int(a)
    b=int(b)

    c = a/b
    print("商为:{0}".format(c))
except ValueError:#按顺序执行,这个异常不对就判断下一个,如果对了,就不再判断
    print("数据类型有错误")
except ZeroDivisionError:
    print("除数不能是0")
except Exception:#这里相当于拦截所有的异常
    print("其他不知道的错误")
else:
    print("没有异常")#没有异常才执行
finally:
    print("最终执行")#有没有异常都执行

2.捕获多个异常

#还可以使用这样的格式: except(异常1,异常2,异常3。。。) as e:
#使用元组储存多个异常的时候,多个异常之间没有顺序要求
a = input("请输入被除数")
b = input("请输入除数")
try:
    a=int(a)
    b=int(b)

    c = a/b
    print("商为:{0}".format(c))
except (Exception,ValueError,ZeroDivisionError) as e:
    print("错误的类型是:{0}".format(type(e)))
    print("错误的信息是:{0}".format(e.args))

3.自定义异常

#自定义异常,并捕获异常的实例:

#首先定义一个异常类,继承异常类,就是一个异常类
class GenderException(Exception):
    def __init__(self):
        super().__init__()
        self.err_msg = "性别只能设置男或者女"

#抛出异常: raise 异常对象
raise GenderException()

#执行结果
'''
Traceback (most recent call last):
  File "C:/mycode/djangoProject/a.py", line 10, in <module>
    raise GenderException()
__main__.GenderException
'''

4.异常信息输出

import traceback
'''使用这个traceback可以将异常信息输出到指定的文件中'''
try:
    n = 1/0
except:
    info = traceback.format_exc() # 获取异常信息 类型是str
    print(info) #打印异常信息

    with open(r"C:\Users\Administrator\Desktop\新建文本文档.txt","a") as f:
        f.write(info) #将异常信息输出到文件中

5.finally返回值

如果finally没有返回值,函数会返回except的返回值

def func():
    try:
        raise Exception
    except:
        print('出错后执行')
        return 'except'
    finally:
        print("最终执行")
        #return 'finally'

#如果finally没有返回值,函数会返回except的返回值
print(func()) # except

如果finally有返回值,函数都会返回finally的返回值

def func():
    try:
        raise Exception
    except:
        print('出错后执行')
        return 'except'
    finally:
        print("最终执行")
        return 'finally'

#如果finally有返回值,函数都会返回finally的返回值
print(func()) # finally