当前位置: 首页 > 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.lryc.cn/news/623579.html

相关文章:

  • uniapp中uni.showToast和 uni.showLoading同时使用时出现提示中断冲突问题。
  • 《告别 if-else 迷宫:Python 策略模式 (Strategy Pattern) 的优雅之道》
  • 【Tech Arch】Hive技术解析:大数据仓库的SQL桥梁
  • 在 Element UI 的 el-table 中实现某行标红并显示删除线
  • Java 大视界 -- 基于 Java 的大数据分布式计算在气象灾害预警与应急响应中的应用
  • 图论水题4
  • 01数据结构-插入排序
  • Tomcat Session Replication Cluster:实现高可用性和可扩展性的关键
  • 用MTEB对Embedding模型进行benchmark
  • LeeCode 39.组合总和
  • 【抽象类和接口】
  • OpenAI 发布了 GPT-5,有哪些新特性值得关注?国内怎么使用GPT5?
  • CentOS启动两个MySQL实例
  • 校园综合数据分析可视化大屏 -Vue纯前端静态页面项目
  • 【Virtual Globe 渲染技术笔记】6 着色
  • IDE/去读懂STM32CubeMX 时钟配置图(有源/无源晶振、旁路/晶振模式、倍频/分频)
  • Mitt 事件发射器完全指南:200字节的轻量级解决方案
  • 【UEFI系列】ACPI
  • 剑指offer第2版——面试题6:从尾到头打印链表
  • tcp会无限次重传吗
  • API网关实施中典型陷阱
  • 什么叫作数据处理?数据处理和数据治理是什么关系
  • AntSK-PyAPI技术深度解析:打造企业级文本嵌入向量服务的完整指南
  • Ansible 核心功能进阶:自动化任务的灵活控制与管理
  • 为什么TCP连接是三次握手?不是四次两次?
  • day43_2025-08-17
  • Python爬虫-解决爬取政务网站的附件,找不到附件链接的问题
  • k8s-单主机Master集群部署+单个pod部署lnmp论坛服务(小白的“升级打怪”成长之路)
  • BEVFusion(2022-2023年)版本中文翻译解读+相关命令
  • Qt——主窗口 mainWindow