有不少刚接触写代码的新手, 会碰到一个令人头疼不已的状况, 那就是代码在平常运行的时候, 表现得毫无问题, 可一旦输入异样的内容, 抑或是读取错误的数据, 程序便会立刻出现报错的情况, 进而直接闪退并终止运行。前十一讲, 我们学了变量, 学了循环, 学了条件判断, 学了函数, 也学了列表字典等基础语法, 这些代码, 要是在完全理想的正确输入之下, 是能够正常运行的, 然而, 在真实使用场景当中, 错误到处都有。在此节课当中, 我们将会去学习核心必备的知识点, 也就是异常处理。一旦学会了它那么你的程序就能够拥有“容错能力”, 在出现错误的时候不会直接就发生崩溃, 进而还能够主动地去提示问题, 其属于是进阶开发以及项目实战所必备的技能啊。一、什么是异常1. 通俗理解异常就是程序运行过程中出现的非语法错误。代码写错了会导致语法错误, 像是少写冒号, 或者括号不匹配如此一来, 程序根本就没法运行标点符号。虽代码语法不存在问题, 然而运行期间, 数据以及操作不符合既定规则, 进而致使程序被强制终止, 于此种状况下便产生称作异常的情况。2. 常见新手高频异常案例我们写一段看似没问题的代码# 数字输入、除法计算num int(input(请输入一个数字)) 10 / numprint(计算结果, )- 正常情况输入2代码正常输出结果出现了异常1, 也就是值错误, 当输入字母abc时, 会触发这种情况, 即无法将字符串转为数字。- 异常2, 也就是除零错误, 当输入为0时, 便会触发, 因为在数学领域当中是不可以除以0的。程序一旦触发异常之事, 便会即刻停止下来, 后续代码全然不会执行, 此乃我们所需着重破解的核心关键问题所在。二、核心语法try- 异常捕获专门提供了try-语句用来捕获并处理异常核心逻辑采取让有可能出现错误状况的代码去进行执行的举措, 要是出现了错误, 那就去执行备用的代码, 从而让程序能够持续不断地运行而不会出现崩溃的情况。1. 基础语法结构try:# 可能会出错的、风险代码代码块:# 出现异常后执行的补救代码异常处理代码块2. 实战改造上面的除法案例try:num int(input(请输入一个数字)) 10 / numprint(计算结果, ):print(输入错误请输入合法的非0数字)运行效果1. 输入字母、0、特殊符号不会闪退只会友好提示错误2. 输入正常数字正常执行计算逻辑。这就是异常处理的核心价值容错、保稳定、优化用户体验。三、精准捕获指定异常类型放置于上方的万能方式能够将形形色色的所有错误予以捕获, 然而却不具备区分具体问题的能力。在实际的实战开发情形当中, 对于我们而言, 需要精确地识别出错误产生的原因, 进而针对具体情况进行处理。1. 常见内置异常类型异常名称 触发场景数值转换错误字符串转数字失败除零运算错误列表、字符串索引越界字典不存在指定键文件不存在2. 多异常精准捕获语法try:num int(input(请输入一个数字)) 10 / numprint(计算结果, ):print(类型错误你输入的不是纯数字):print(数学错误不能输入0作为除数)具有这样的优势, 那就是, 用户能够清楚明晰地晓得自身错在何处, 进而便于修正输入, 而且相较于万能提示更为专业。四、进阶关键字else、先支持两个拓展关键字, 再覆盖正常执行的场景, 接着覆盖无论对错都执行的场景, 最终完整覆盖业务逻辑。1. else无异常时执行代码无报错、正常运行完毕执行else中的代码try:num int(input(请输入一个数字)) 10 / num:print(输入格式错误):print(禁止除以0)else:# 只有try代码完全成功才会执行print(计算成功最终结果, )2. 无论是否异常必执行常用于关闭文件、释放资源、结束提示等固定操作try:num int(input(请输入一个数字)) 10 / numprint(计算结果, ):print(程序运行出错):打印, “ 本次运算结束, 等待下次输入 ”。核心特点是, 无论代码会不会报错, 代码都会百分百执行, 它是项目资源释放的核心语法。五、主动抛出异常raise除开捕获那由系统自动触发起来的异常之外, 我们还能够手动去自定义异常, 主动地终止那些不合理的操作, 以此来规范数据。语法raise 异常类型(自定义错误提示)实战案例限制年龄输入age int(input(请输入你的年龄))if 0 or age 150:# 主动抛出数值异常raise (年龄输入不合法必须在0-150之间)else:print(年龄输入正常)其适用的场景包含数据校验, 其适用的场景包含权限判断, 其适用的场景包含参数过滤, 这是企业级代码的标准化写法。六、课堂综合实战完整容错计算器从本节课的全部知识点里进行整合, 去编写一款简易的除法计算器在运行时永远不会崩溃, 专门涵盖精准报错、于正常情况之下的提示以及收尾时固定会出现的语句。# 容错计算器def ():try:创建变量num1, 使其等于将输入的内容, 也就是请输入第一个数字转换至整型数据形式。将输入“请输入第二个数字: ”所得到的内容, 进行类型转换为整数类型并赋予num2。res num1 / num2:print(错误提示请输入纯整数数字):print(错误提示除数不能为0)else:打印, 格式化输出内容是, 计算完成, 冒号后面是, 数字一, 除号, 数字二, 等于, 结果保留两位小数。, 两个f, 右括号, 标点符号。:print(—————— 运算流程结束 ——————)# 调用函数()七、本节课核心总结1. 会致使程序闪退的异常, 属于运行时错误, 是开发过程当中必须要去解决的问题。2. try- 核心捕获异常防止程序崩溃实现容错3. 支持精准捕获指定异常替代万能捕获让报错更清晰4. else 无错执行、 必执行完善代码逻辑闭环5. raise 可主动抛出异常用于数据校验和规则限制。课后作业1. 写下代码, 于其中输入列表索引, 借由异常处理这等方式, 去解决索引越界时出现的报错问题。2. 扩展练习内容为, 联合字典, 捕捉键不存在的异常状况, 给出友善的提示信息。