python——异常处理

异常是什么

python使用异常对象来表示异常对象,并且再遇到错误时引发异常,当异常对象没有被处理的时候,程序会直接报出一个错误,需要注意的是:每一个异常实际上都是一个类的实例,本次博客的目的是用各种方法来捕获这些实例,并且采取某些措施,以免使程序运行报错

raise语句

raise一般是在想调出相应的错误时才会执行,例如想直接报出Exception的错误,直接在代码中执行raise Exception即可,具体的异常类较多,这里不一一列举

异常捕获

一般的异常捕获

try:
    x=int(input("please input x : "))
    y=int(input("please input y : "))
    print(x/y)
except ZeroDivisionError:
    print("the second number can not be zero ! ")

在这里插入图片描述
在这里插入图片描述
上面可以看出,在第二个值即y的值为0的时候,按照道理,是应该直接报错的,所以这里直接采用了一个try和except语句来捕获这样的错误,虽然上面的语句是可以采用一个if语句来实现嵌套,但是这里需要考虑到的是,如果这里需要输入的值比较多或者代码比较复杂的时候,if语句的嵌套将会变的非常的复杂,所有采用try语句来实现相应的代码捕获其实是一个很好的处理方式

可选择性的用异常处理

class MuffledCalculator:
    muffled=False
    def cal(self,expression):
        try:
            return eval(expression)
        except ZeroDivisionError:
            if self.muffled:
                print("Division by zero is illagel")
            else:
                raise

cal=MuffledCalculator()
print(cal.cal("10/2"))

cal3=MuffledCalculator()
print(cal2.cal("10/0"))

cal2=MuffledCalculator()
cal2.muffled=True
print(cal2.cal("10/0"))

以上的操作中可以看到,这里直接定义了一个MuffledCalculator类,同时在这个类里面直接定义了一个muffled的属性,在需要进行异常捕获的时候直接将其设置为true即可,在不需要捕获异常处理时,将buffled的值设置为false即可,当然这里默认将其设置为false
多个except

try:
    x=int(input("please input x : "))
    y=int(input("please input y : "))
    print(x/y)
except ZeroDivisionError:
    print("the second number can not be zero ! ")
except ValueError:
    print("you shoule input int ! ")

在这里插入图片描述
这里为了捕获多个异常的情况,直接设置多个except即可,这里便可以对特定的多个except语句进行处理,实际上还可以对以上的语句代码进行简化得到下面的代码语句

try:
    x=int(input("please input x : "))
    y=int(input("please input y : "))
    print(x/y)
except (ZeroDivisionError,ValueError):
    print("please input right number  ")

try:
    x=int(input("please input x : "))
    y=int(input("please input y : "))
    print(x/y)
except (ZeroDivisionError,ValueError) as e:
    print(e)
try:
    x=int(input("please input x : "))
    y=int(input("please input y : "))
    print(x/y)
except :
    print("there is something wrong !")

以上的代码都可以实现相应的功能(实现对多个异常的捕获),需要注意的时在需要特定输入的情况下,用户没有输入而直接回车,或者用户直接ctrl+c语句来推出代码的执行时,这就需要以第三种方式来对异常进行处理,但是这里比较麻烦的是没有一个特定的处理错误的方法,需要编译特定的语句(实际上sys.exit也可以停止代码的执行)

异常处理操作

while True:
    try:
        x=int(input("please input x : "))
        y=int(input("please input y : "))
        value=x/y
        print("the value of x/y is : ",value)
    except:
        print("invalid input ! ")
    else:
        break

在这里插入图片描述finally语句

x=None
try:
    x=1/0
finally:
    print("cleaning up")
    del x

在这里插入图片描述
这里的finally表示的是,不管以上代码中园内有异常的出现,都会直接的执行finally语句,需要注意的是为什么在try之前要定义x为none呢,理由是如果之前没有定义x为none的话,在执行语句的时候,报错的zerodivisionerror会直接在在语句之前就会报错,而不会直接进入循环体里面,因此需要在语句之前定义好x为none

异常和函数
需要注意的是异常和函数天然的就在一起考虑,一般情况下如果不处理函数中的异常,异常将会一直向上传递到调用函数的地方,如果该处仍然没有被处理,则异常会一直向上传递,直到到达主程序(全局作用域)如果主程序也没有处理异常,则例程序将会停止并且显示栈跟踪的消息

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值