你是一个成熟的python了,要学会自己处理bug——python异常处理

前言

相信很多同学写代码的时候都会被乱七八糟的程序报错所折磨,有的时候只出现了一个小错误就导致程序不能运行,然后下面跳出来一大堆的错误信息,看着就脑壳痛。如果是我们开发的应用程序像这样一出错程序就不能运行的话,你用的时候会舒服吗?但是错误又是不可避免的,任何程序都会有bug。如果能有一种机制,程序出了错他还能接着运行,然后会告诉开发者哪里出了错的话是不是很nice!这就是Python中的异常处理机制,很多程序设计语言都有异常处理,像C++和Java都有异常处理,Python中的异常处理语法和他们差不多,下面我就来介绍一下。

简单的异常捕获

请看代码:

num = int(input("请输入一个整数: "))
print(num)

用int限制我们输入的数据为整型,如果我们输入的是不是整型的话,程序就会报错,错误信息如下:
在这里插入图片描述
但是人难免会犯错,像是手误输错了,一报错的话程序就会宕机,就像是QQ登录的的时候叫你输入QQ账号,账号应该是数字吧,如果你看错了输个字母进去了,然后没有加入异常处理的话,程序直接闪退,然后又得打开程序重来,要是开发出这样的软件,会有谁来用呢!
如果我们加入异常处理:

try:
    # 不能确定正确执行的代码
    num = int(input("请输入一个整数: "))
except:
    # 错误处理的代码
    num = int(input("请输入正确的整数: "))

print(num)

然后再输入一个字符串的话会出现什么结果呢?
在这里插入图片描述
try语句后面是一个可能出现错误的代码块,如果程序在此处报错,会跳进except后面的代码块,执行里面的语句,这就是Python异常处理的基本语法。

捕获错误类型

except后面可以啥也没有,也可以接一个错误类型,不同的错误类型可以执行不同的语句,提供多样化的异常处理。

try:
    # 提示用户输入一个整数
    num = int(input("请输入一个整数:"))
    # 使用8除以用户输入的整数并且输出
    result = 8 / num
    print(result)
except ZeroDivisionError:
    print("除0错误")
except ValueError:
    print("请输入正确的整数")

错误类型可以在pycharm报错的下面查看到,所以我们编写程序的报错还是有点用处的。写程序的时候不怕报错,错误越多,对我们越是一种警醒。
在这里插入图片描述
如果某个错误不知道是什么类型,Python也能处理:加上这句代码except Exception as result:就能对错误类型进行输出。

完整的异常捕获语法

一个完整的异常捕获有五个部分:

  • try语句:可能会出错的地方。
  • except:知道的可能出现的错误类型。
  • except Exception as …:未知的错误类型。
  • else:没有错误正常执行的代码。
  • finally:无论是否出错都会执行的代码。
try:
    # 提示用户输入一个整数
    num = int(input("请输入一个整数:"))
    # 使用8除以用户输入的整数并且输出
    result = 8 / num
    print(result)
except ValueError:
    print("请输入正确的整数")
except Exception as result:
    print("未知错误 %s" % result)
else:
    print("尝试成功")
finally:
    print("无论是否出现错误都会执行的代码")

异常的传递

异常具有传递性,也就是说某处出现的异常,不一定非要在该处处理,我们可以在他被调用的时候来处理,例如某个函数出现了异常,我们可以在主程序调用函数的时候来处理这个异常。

def demo1():
    return int(input("输入整数: "))

def demo2():
    return demo1()

# 利用异常的传递性,在主程序捕获异常
try:
    print(demo2())
except Exception as result:
    print("未知错误 %s" % result)

抛出异常

Python使用raise语句来抛出异常,raise后面接的必须是一个异常类型,也就是说:停止运行这个函数中的代码,将程序执行转到except语句。

def input_password():
    # 1.提示用户输入密码
    pwd = input("请输入密码: ")
    # 2.判断密码长度
    if len(pwd) >= 8:
        return pwd
    # 3.如果<8主动抛出异常
    print("主动抛出异常")
    # 1>创建异常对象-可以使用错误信息字符串作为参数
    ex = Exception("密码长度不够")
    # 2>主动抛出异常
    raise ex
# 提示用户输入密码
try:
    print(input_password())
except Exception as result:
    print(result)

最后

我们这的新冠患者今天清零了,相信隔离的日子马上就要结束了,加油!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值