Python基础语法速查:条件、循环与异常处理语句汇总

阿橙
阿橙
发布时间:2026-10-30| 6人浏览过
原创

全面汇总Python中的条件判断、循环控制与异常处理语句。包含基础语法、执行流程图解、核心机制对比、常见易错陷阱及速查表,帮助开发者快速掌握Python控制流语句。

控制流语句是编写可执行程序的核心骨架。Python 通过条件分支实现逻辑分流、通过循环结构实现重复计算、通过异常处理机制保证程序在出现意外情况时的健壮性与可恢复性。本文梳理 Python 中 if/elif/else 条件语句、for/while 循环语句以及 try/except/else/finally 异常处理语句的标准写法、控制流向、关键差异与注意事项,提供清晰直接的速查参考。

一、条件判断语句(if / elif / else)

条件语句根据表达式计算出的布尔真假值决定后续执行路径。Python 使用缩进来界定代码块,不支持大括号包围语句。

1. 核心语法结构

标准的多分支判断结构包含一个起始 if、零个或多个中间 elif,以及可选的末尾兜底 else:

score = 85

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "D"

print(f"最终等级为: {grade}")

当满足某个分支条件并执行其代码块后,整个 if-elif-else 结构立即终止,不再评估后续任何分支。

2. 三元条件表达式

对于简单的二选一取值场景,Python 支持单行条件表达式:值1 if 条件 else 值2。该表达式要求必须存在 else 分支:

status = "成年" if age >= 18 else "未成年"

3. Python 的真值测试规则(Truth Value Testing)

在 Python 中,条件表达式不强制要求必须是显式的 True 或 False。所有对象都可以隐式参与真值测试。下列对象在布尔上下文中求值结果均为假(Falsy):

  • 常量:None、False
  • 各类数值零:0、0.0、0j、Decimal(0)
  • 空序列与空映射:空字符串 ""、空元组 ()、空列表 []、空字典 {}、空集合 set()、range(0)
  • 定义了 __bool__() 返回 False 或 __len__() 返回 0 的自定义类实例
Python基础语法速查:条件、循环与异常处理语句汇总
图 1:条件分支流转过程与 Python 假值对象速查

关键机制对比:多分支 if-elif-else 与多个独立 if 语句

相同条件设定:输入变量 x = 15,需要验证其所属区间。

  • 多分支 if-elif-else(互斥逻辑):各分支具备严格互斥性。一旦前面的 if 或 elif 为真,后续所有判断均被短路跳过,只执行命中首个分支的代码块。适合多选一的归类业务。
  • 连续独立 if(全量执行):每一个 if 均为独立语句,解释器会无条件对每一个 if 条件进行计算求值。如果条件间存在交集,将引发多次覆盖赋值或重复副作用。当判断条件包含复杂函数调用或 I/O 查询时,连续 if 会产生显著性能损耗。

二、循环结构语句(for 与 while)

循环语句用于重复执行一段代码。Python 提供两类基本循环:以遍历可迭代对象为导向的 for 循环,以及以状态判断为导向的 while 循环。

1. for 循环与常用迭代模式

Python 的 for 循环实质上是“for-each”迭代器协议的实现,它依次从可迭代对象(列表、元组、字典、字符串、生成器等)中取出元素赋给变量,直到元素耗尽:

# 基础范围遍历
for i in range(1, 5):
    print(f"数值: {i}")  # 输出 1, 2, 3, 4

# 同时获取索引与值
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):
    print(f"序号 {index}: {fruit}")

# 多序列并行遍历
prices = [5, 3, 10]
for fruit, price in zip(fruits, prices):
    print(f"{fruit} 售价为 {price} 元")

2. while 循环

while 循环在进入循环前先评估布尔条件,若条件为 True 则执行循环体,重复这一过程直到条件变为 False:

count = 3
while count > 0:
    print(f"倒计时: {count}")
    count -= 1  # 必须存在促使条件走向终止的状态变更,避免死循环

3. 流程控制关键字:break 与 continue

  • continue:立即终止当前这一轮迭代,跳过循环体中剩余的代码,直接进入下一次循环条件的判定与迭代步。
  • break:立即彻底终止并跳出当前循环体,执行循环结构之后的代码。

4. 循环专属的 else 子句

这是 Python 循环中独具特色但常被误解的语法。循环后面的 else 子句仅在循环正常执行完毕(即未被 break 提前打断)时执行。如果在循环过程中触发了 break,else 块将被跳过。此特性极其适合用于元素查找判定:

target = 7
numbers = [1, 3, 5, 9, 11]

for num in numbers:
    if num == target:
        print(f"找到目标元素: {target}")
        break
else:
    print(f"遍历结束,未在列表中找到 {target}")
Python基础语法速查:条件、循环与异常处理语句汇总
图 2:循环体跳转关键字(break、continue)与 else 子句的执行时序路径

关键机制对比:for 迭代与 while 循环的选型依据

相同任务设定:处理一批需要按顺序检验的数据项。

  • for 循环(已知集合/有限范围):依托迭代协议(__iter__ 与 __next__)。无需外部手动维护游标变量,自动处理索引推进与终止边界,杜绝越界与死循环风险。对于遍历容器、文件行、生成器,for 是首选且符合 Pythonic 风格的方式。
  • while 循环(状态驱动/不确定次数):由动态布尔表达式主导。适合网络轮询、持续监听、等待外部事件触发等未知循环次数的场景。缺点是必须显式更新循环状态,一旦疏漏极易引发 100% CPU 占用的死循环。

三、异常处理语句(try / except / else / finally)

异常处理不仅用于防御代码崩溃,更是 Python 处理可预期分支的核心设计思想(EAFP 模式)。完整的异常处理由四个互补的子句构成。

1. 四段式语法架构

try:
    file = open("data.txt", "r", encoding="utf-8")
    content = file.read()
    value = int(content.strip())
except FileNotFoundError as err:
    print(f"文件不存在: {err}")
except ValueError as err:
    print(f"数据解析失败,非有效整数: {err}")
except (OSError, IOError) as err:
    print(f"系统 I/O 错误: {err}")
else:
    print(f"数据加载解析成功,值为: {value}")
finally:
    try:
        file.close()
    except NameError:
        pass  # file 未成功创建
    print("资源释放阶段结束")

2. 各段职责与执行原则

  1. try 块:包含可能引发异常的目标代码。一旦某行代码触发异常,后续行直接中止,控制权交给 except。
  2. except 块:拦截匹配特定类型的异常并予以修复或记录。可声明多个分支,或使用元组 except (TypeError, ValueError): 同时捕获多种异常。
  3. else 块:仅在 try 块内没有发生任何异常时执行。将无异常时的后续操作移入 else,可以防止在 try 中混入过多代码,避免意外捕获不该捕获的异常。
  4. finally 块:无论是否抛出异常、异常是否被捕获,甚至在 try/except 中存在 return 语句的情况下,finally 块都必定执行。通常用于清理外部资源(关闭网络连接、释放文件句柄、清理数据库游标)。
Python基础语法速查:条件、循环与异常处理语句汇总
图 3:异常处理四段式各语句执行时序及路由逻辑

关键机制对比:LBYL(事前防御)与 EAFP(事后捕获)

相同场景设定:从字典 user_data 中提取嵌套键 profile 并访问其 age 字段。

  • LBYL(Look Before You Leap,先看后跳):通过连续的 if "profile" in user_data and "age" in user_data["profile"]: 进行前置校验。在并发多线程环境或文件操作中,前置校验与实际读取之间存在时差,极易引发检查时至使用时竞态条件(TOCTOU);且增加了冗余的键查找开销。
  • EAFP(Easier to Ask for Forgiveness than Permission,先斩后奏):直接执行访问并用 try ... except KeyError: 兜底。在正常预期下几乎无额外开销,且由于操作直接原子化执行,天然规避了竞态隐患,属于官方高度推崇的 Pythonic 编写风格。

四、控制流常见陷阱与防御方案

陷阱 1:严禁使用裸 except:

直接写 except: 会拦截包括 KeyboardInterrupt(用户按 Ctrl+C 中断)和 SystemExit(程序退出)在内的所有系统级信号,导致程序无法正常被终端终止。务必使用明确的异常类,如 except Exception:,或精确定位到 except (ValueError, KeyError):。

陷阱 2:遍历中直接修改列表容器

在 for item in my_list: 循环体内直接执行 my_list.remove(item) 会改变列表底层的索引指针,导致后续某些元素被无预警跳过。若需过滤,应遍历原列表的切片副本 for item in my_list[:]:,或改用列表推导式重构 my_list = [x for x in my_list if condition(x)]。

五、控制流核心语法速查全景

Python基础语法速查:条件、循环与异常处理语句汇总
图 4:Python 基础控制流架构与使用规范总览

6. 控制流语句速查对照表

控制语句 对应关键字 主要应用场景 核心注意事项
单分支/多分支条件 if / elif / else 根据不同互斥条件执行特定业务逻辑 分支遵循自上而下匹配,命中即短路;注意隐式真值转换
三元条件表达式 x if cond else y 紧凑的变量二选一赋值 必须具备 else 分支,不适合承载复杂副作用操作
集合/序列循环 for ... in 已知元素集合、切片、范围或生成器迭代 首选方案;禁止在循环中直接增删原列表元素
条件驱动循环 while 未知循环次数、依赖外部状态或事件触发 循环体内必须具备步进逻辑,防止出现死循环
循环中断与跳步 break / continue 提前终止循环或跳过本轮剩余语句 break 会一并跳过循环的 else 子句
循环完成确认 for/while ... else 元素查找、搜索未命中兜底逻辑 仅在循环未被 break 打断时才被触发
异常捕获与恢复 try / except 拦截预期可能出现的运行时错误 严禁使用裸 except:,必须指定明确的异常类型
异常无害平稳区 else(配合 try) 仅在 try 顺利完成时执行 避免将后续无风险代码混入 try 导致误捕获
确定性资源清理 finally 文件关闭、网络断开、锁释放等收尾操作 无论是否有未处理异常或提前 return,均保证执行

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。