python异常处理

定义

通过捕获异常的方式获取这个异常的名称,在通过其他逻辑代码让程序继续运行。根据异常做出的逻辑处理就是异常处理。

异常名称描述
AttributeError程序试图访问对象属性不存在
IndexError索引超出范围时引发
KeyError字典中查找不存在的关键字时引发
NameError访问未声明的变量时引发
TypeError不同类型数据之间的无效操作
ValueError格式转换引发,如转化数字失败,解码文件失败等
ArithmeticError数学计算引发

异常处理标准结构

try–except

try# 可能产生异常的代码块
    pass
except [Exception1, Exception2, ...] [as e]:
    # 异常处理代码块1
    pass
except:
    # 异常处理代码块2
    pass
else:
    #程序未发生异常时执行的代码
    pass
finally:
    #资源回收
    pass

在这里插入图片描述

raise

raise Exception
可以自定义异常并返回,只要继承Exception即可。

class MyExcption(Exception):
    pass

class Auction:
    def __init__(self):
        self.auction_price = 100
    def auction(self,price):
        assert price > 0, "the price should be greater than 0"
        if price < self.auction_price:
            raise MyExcption("Price too low")
        else:
            self.auction_price = price
auction = Auction()
try:
    auction.auction(-10)
    print("now the price is {}".format(auction.auction_price))
except AssertionError as e:
    print("Assertion Error raised: " + str(e))
except MyExcption as e:
    print("Exception raised: " + str(e))

assert

assert 表达式[,参数]
等价于

if 表达式==True:
    程序继续执行
else:
    程序报 AssertionError 错误

使用例子见上文raise部分

异常处理原则

1、只有try语句块是必须的,except,else,finally都是非必需的, except和finally至少出现一个。
2、多个except语句块,捕获父类异常的except应该处于捕获子类异常的前面。(Python会首先尝试匹配父类异常的except,如果匹配成功,那么就不会再去匹配子类异常的except)
3、except 后面不指定异常名时候,就是捕获所有异常,这种情况应该是最后一个except语句块。
4、finally语句块出现的话,就必须位于所有语句块最后。
5、捕获异常时候要保留异常信息,通知给合适的人。
6、不要使用庞大的try块
7、不要忽略捕获到的异常

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值