Python-异常处理

异常:

while True:
    try:
        price=float(input("请输入价格:"))
        print("价格为:%5.2f"%price)
        break
    except ValueError:
        print("您输入的数字不是数字")

在上面程序的执行过程中,当输入的不是数字的时候,float函数产生一个valueError异常,
立刻停止try中下面代码的执行,转而执行,异常处理模块再进行下一次循环,知道进行输入的是数字才进行打印以及跳出循环。

捕获与处理异常

try:
    x=float(input("请输入设备成本:"))
    y=int(input("请输入分摊年数:"))
    z=x/y
    print("每年分摊费用:%.2f"%z)
except ZeroDivisionError:
    print("输入异常,分摊年数不可以为0")
except:
    print("输入异常")  #上述异常都不匹配执行该语句
else:
    print("没有异常")  #没有异常发生
finally:
    print("有没有异常都需要执行finally语句")

自定义异常类

class InvalidNumberError(ArithmeticError): #自定义异常类
    def __init__(self,num):
        super(InvalidNumberError,self).__init__()
        self.num=num
    def getNum(self):
        return self.num
try:
    x=float(input("请输入设备成本:"))
    y=int(input("请输入分摊年数:"))
    z=x/y
    if z>10:
        raise InvalidNumberError(z)  #显示抛出自定义异常类
    print('每年分摊金额:%.2f'%z)
except ZeroDivisionError:
    print("输入异常,年数不能为0")
except InvalidNumberError as ex:
    print("每年分摊的金额为%.2f大于10了,重新分配。"%ex.getNum())
except:
    print("输入有误")

with语句

try:
    f=open(r'a.txt','r')
    for line in f:
        print(line,end='')
finally:
    f.close()

上述语句用可以用with语句简写,with不需要try—finally语句来确保文件对象关闭,无论是否出现异常,文件对象都由系统自动关闭。
只有接受上下文管理协议的对象才能使用with语句。

with open(r'a.txt','r') as f:
    print(f)
    for line in f:
        print(line,end='')

断言

格式:assert expression[,arguments]
expression是断言表达式,如果为真断言成功,如果为假触发AssertionError异常,arguments是断言表达式为假时传递给AssertError对象的字符串。

也可以用try_excep捕获AssertError异常。

try:
    assert 2==1*1,'表达式运算符号错误'
except AssertionError as arg:
    print(" %s,%s"%(arg.__class__.__name__,arg))

python异常处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值