Python异常处理

异常处理结构1
try:
    指令
except 异常对象:      # 此处可以不指定异常对象,如果不指定异常对象,则捕捉所有异常
    异常处理程序
异常处理结构2
try:
    指令              # 预先设想可能引发异常的指令
except 异常对象:
    异常处理程序       # 通常是指出异常原因,方便修正
else:
    正确处理程序       # 如果指令正确执行此区块程序
异常处理结构3
可以设计多个except捕捉多种异常
try:
    指令
except 异常对象1:       # 如果指令发生异常对象1执行
    异常处理程序1
except 异常对象2:       # 如果指令发生异常对象2执行
    异常处理程序2
异常处理结构4
设计一个except,捕捉多个异常
try:
    指令
except (异常对象1,异常对象2,.....):
    异常处理程序
异常处理结构5
try:
    指令
except:
    异常处理程序
else:
    正确处理程序
finally:
    最终执行程序       # 不论是否发生异常发生一定会执行finally内的程序,finally必须放在except和else之后
抛出异常
自己定义异常并丢出异常信息,程序停止正常往下执行
raise Exception('error message')    # Python提供了一个通用的异常对象Exception
....
try:
    指令
except Exception as err:   # err 相当于是重命名Exception
    print('errorMessage:', str(err)
记录错误
每次错误都会出现Trackback字符串,在这个字符串中指出程序错误的原因。导入traceback模块,
使用trackback.format_exc()记录这个Trackback字符串。

示例

import traceback

def function1(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("除数不能为0")

def function2(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("除数不能为0")
    else:
        print("{}除以{}的结果是:".format(a, b), result)

def function3(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("除数不能为0")
    except TypeError:
        print("类型错误,请输入数字")
    else:
        print("{}除以{}的结果是:".format(a, b), result)

def function4(a, b):
    try:
        result = a / b
    except (ZeroDivisionError, TypeError):
        print("除数为0 或 输入类型错误")
    else:
        print("{}除以{}的结果是:".format(a, b), result)

def function5(a, b):
    try:
        result = a / b
    except:
        print("发生异常")
    else:
        print("{}除以{}的结果是:".format(a, b), result)
    finally:
        print("计算完成")

def function6():
    '''
    抛出异常
    :return:
    '''
    def passWord(pwd):
        len_pwd = len(pwd)
        if len_pwd < 5:
            raise Exception("密码长度不足")
        elif len_pwd > 8:
            raise Exception("密码长度太长")
        print("密码正确!")

    for pwd in ('sljfljkll', 'ads', 'lkjlkj'):
        try:
            passWord(pwd)
        except Exception as e:
            print(e)

def function7():
    '''
    记录异常
    :return:
    '''

    def passWord(pwd):
        len_pwd = len(pwd)
        if len_pwd < 5:
            raise Exception("密码长度不足")
        elif len_pwd > 8:
            raise Exception("密码长度太长")
        print("密码正确!")

    for pwd in ('sljfljkll', 'ads', 'lkjlkj'):
        try:
            passWord(pwd)
        except Exception as e:
            errlog = open('error.txt', 'a', encoding='utf-8')
            errlog.write(traceback.format_exc())
            errlog.close()
            print("记录完成")

if __name__ == '__main__':
    function1(2, 0)
    function2(4, 2)
    function3('a', 3)
    function4('a', 'b')
    function5(8, 2)
    function6()
    function7()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值