当前位置: 首页 > news >正文

Python入门第7课:异常处理机制:让你的程序更健壮(try-except详解)

Python入门第7课:异常处理机制:让你的程序更健壮(try-except详解)

作者: 蛋皮
标签: Python, 异常处理, try-except, 错误处理, 程序健壮性

在编写程序时,我们总是希望一切都能按预期进行。然而,现实世界充满了不确定性:用户可能输入错误的数据,文件可能不存在,网络连接可能中断,磁盘可能已满……当这些“意外情况”发生时,程序会产生一个异常 (Exception)。如果不加以处理,异常会导致程序立即终止,并打印出一长串令人困惑的错误信息(堆栈跟踪),给用户带来糟糕的体验。

今天,我们将深入学习Python的异常处理机制。掌握 try-except 结构,你将能够优雅地捕获和处理错误,让你的程序变得更加健壮、可靠和用户友好


什么是异常?

简单来说,异常就是程序在运行过程中发生的错误事件。它打断了正常的指令流。

常见的异常类型

Python内置了许多异常类型,以下是一些最常见的:

  • SyntaxError: 语法错误(通常在运行前就能发现)。
  • NameError: 尝试访问一个未定义的变量。
  • TypeError: 操作或函数应用于不适当类型的对象(如 "hello" + 5)。
  • ValueError: 操作或函数接收到具有正确类型但值不合适的参数(如 int("abc"))。
  • IndexError: 序列(如列表、元组)的索引超出范围。
  • KeyError: 字典中不存在指定的键。
  • FileNotFoundError: 试图打开一个不存在的文件。
  • ZeroDivisionError: 除数为零。
  • IOError: 输入/输出操作失败(如文件读写错误)。
  • ImportError: 导入模块失败。

核心武器:try-except 语句

try-except 是Python处理异常的核心结构。它的基本逻辑是:“尝试执行一些可能出错的代码,如果捕获到特定的错误,就执行相应的处理代码”。

基本语法

try:# 可能会引发异常的代码块risky_operation()
except ExceptionType1:# 处理 ExceptionType1 类型异常的代码handle_error()
except ExceptionType2:# 处理 ExceptionType2 类型异常的代码handle_another_error()
except:# 可选:捕获所有其他未被前面except处理的异常handle_any_other_error()
else:# 可选:如果try块中没有发生任何异常,则执行此块print("一切顺利,没有错误!")
finally:# 可选:无论是否发生异常,都会执行此块(常用于清理资源)print("清理工作完成。")

详细解析各部分

1. try

这是你放置“危险”代码的地方。将你认为可能会出错的语句放在 try: 之后的缩进代码块中。

2. except

  • 捕获特定异常: 你可以指定要捕获的异常类型。当 try 块中的代码引发该类型的异常时,对应的 except 块就会被执行。

    try:number = int(input("请输入一个数字: "))result = 10 / numberprint(f"10 除以 {number} 等于 {result}")
    except ValueError:print("错误:您输入的不是一个有效的数字!")
    except ZeroDivisionError:print("错误:除数不能为零!")
    
    • 如果用户输入 abc,会引发 ValueError,执行第一个 except
    • 如果用户输入 0,会引发 ZeroDivisionError,执行第二个 except
  • 捕获多个异常: 可以在一个 except 后面列出多个异常类型(用元组表示)。

    except (ValueError
http://www.xdnf.cn/news/1318987.html

相关文章:

  • 配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~
  • C语言(12)——进阶函数
  • Day3--滑动窗口与双指针--2461. 长度为 K 子数组中的最大和,1423. 可获得的最大点数,1052. 爱生气的书店老板
  • 数字货币的法律属性与监管完善路径探析
  • 实变函数中集合E的边界与其补集的边界是否相等
  • Android中使用Compose实现各种样式Dialog
  • Dify 从入门到精通(第 40/100 篇):Dify 的企业级权限管理
  • Mutually aided uncertainty
  • Windchill 11.0使用枚举类型自定义实用程序实现生命周期状态管理
  • Makefile介绍(Makefile教程)(C/C++编译构建、自动化构建工具)
  • 计算机网络 TCP、UDP 区别
  • 从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战
  • Bee1.17.25更新Bug,完善功能.不支持NOSQL,分库分表Sharding(2.X版有)
  • C语言网络编程TCP通信实战:客户端↔服务器双向键盘互动全流程解析
  • 模拟实现 useEffect 功能
  • 【R语言】R 语言中打印含有双引号的字符串时会出现 “\” 的原因解析
  • 基于STM32单片机智能RFID刷卡汽车位锁桩设计
  • 基于51单片机汽车自动照明灯超声波光敏远近光灯设计
  • 自由学习记录(85)
  • TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编译 TensorRT-LLM 的完整实践
  • 计算机网络 TCP time_wait 状态 详解
  • Java开发MCP服务器
  • thingsboard 服务器在2核CPU、2G内存资源配置下如何调优提速,适合开发/演示
  • vue封装请求拦截器 响应拦截器
  • 计算机网络 Session 劫持 原理和防御措施
  • 给纯小白的Python操作 PDF 笔记
  • 【算法】模拟专题
  • nertctl使用了解
  • B站 韩顺平 笔记 (Day 21)
  • Windows平台Frida逆向分析环境完整搭建指南