Python流程控制实战:条件判断、循环结构与异常处理详解
在Python开发中,合理运用条件判断、循环结构与异常处理是编写高可读性与高容错代码的基础。本文将按业务场景梳理各类控制流的语法规范、参数配置与执行顺序,并通过完整的计价计算示例展示如何组合使用,帮助开发者快速搭建稳定可靠的自动化脚本。
条件判断的执行路径规划
流程控制的核心在于让程序能够根据运行时的状态数据自动选择执行分支。Python通过缩进定义代码块,所有条件判断均围绕布尔表达式的结果展开。
第1步:建立基础条件判断入口
if 语句用于评估单一条件。当表达式结果为 True 时执行内部代码块,否则跳过。注意:Python依赖标准的4空格缩进对齐来确定代码作用域,切勿混用Tab与空格。
age = 18
if age >= 18:
print("已成年,可以投票!")
条件表达式的底层逻辑依赖于对象的真值测试(Truthy/Falsy)。以下默认被视为 False:None、数值 0/0.0、空容器(如 [], {}, ())、空字符串 ""。其余任意对象在布尔上下文中均为 True。
if []:
print("不会执行")
if "Hello":
print("非空字符串为 True") # 会执行
第2步:配置多分支与嵌套逻辑
实际业务通常需要处理互斥或递进的多种情况。使用 elif(即 else-if)可串联多个判断,else 作为兜底分支。执行引擎自上而下扫描,一旦命中某个条件,后续分支将被直接跳过。
score = 85
if score >= 60:
print("及格")
elif score == 60:
print("刚好达标")
else:
print("需补考")
当单一线性判断无法满足维度交叉需求时,可采用嵌套结构。但为避免维护困难,建议嵌套层级控制在3层以内。
a = int(input("请输入年龄:"))
if a < 10:
if a < 1:
print("婴儿")
else:
print("儿童")
else:
print("青少年或以上")
复杂决策常需组合多个条件。Python提供标准逻辑运算符:and(全真为真)、or(一真即真)、not(取反)。
| 运算符 | 语义 | 典型写法 |
|---|---|---|
and | 同时成立 | age >= 18 and status == "active" |
or | 任一成立 | weather == "rain" or temp > 35 |
not | 逻辑取反 | not is_expired |
对于简单的二选一赋值操作,可使用三元表达式压缩至单行,兼顾效率与清晰度:
status = "成年" if age >= 18 else "未成年"
print("及格" if score >= 60 else "不及格")
数据遍历与循环控制策略
当任务需要重复执行或持续监听输入时,循环结构配合合理的终止条件即可自动化处理批量操作。
第1步:利用range与for完成序列迭代
for 适用于已知迭代对象的场景。内置函数 range() 可按指定步长生成整数序列,常用于精确控制执行次数。
| 调用方式 | 覆盖范围 | 返回示例 |
|---|---|---|
range(stop) | 0 到 stop-1 | range(3) → 0, 1, 2 |
range(start, stop) | start 到 stop-1 | range(2, 5) → 2, 3, 4 |
range(start, stop, step) | 含固定步长跳跃 | range(0, 10, 2) → 0, 2, 4, 6, 8 |
for i in range(5):
print(f"第 {i+1} 次任务")
结合列表推导式可将循环体与数据转换合并书写,大幅减少中间变量声明:
# 原始写法
squares = []
for x in range(5):
squares.append(x ** 2)
# 推导式精简写法(推荐)
squares = [x ** 2 for x in range(5)] # [0, 4, 16]
evens = [x for x in range(10) if x % 2 == 0]
第2步:设置while循环的退出与安全策略
while 循环依赖显式条件维持运行。设计时必须确保循环体内包含修改条件的语句,防止陷入死锁。
count = 0
while count < 3:
print(f"计数:{count}")
count += 1
多层级数据处理时可启用嵌套循环。例如模拟分秒计时器输出:
import time
for i in range(60):
for j in range(60):
time.sleep(1)
print(f'{i} 分 {j} 秒')
print(f"{i} 分钟结束")

第3步:通过break/continue优化流程走向
break 强制中断当前所在的最内层循环,程序跳转至循环外继续执行;continue 终止本次迭代剩余代码,立即进入下一次条件判定。两者在 for 与 while 中均有效。
# 提前终止搜索
for num in [1, 3, 5, 7, 9]:
if num == 5:
print("找到目标,退出")
break
print(num)
# 过滤特定数据
for i in range(1, 6):
if i % 2 == 0:
continue
print(i) # 仅输出奇数
运行时异常捕获与容错处理
外部输入或网络请求等环节极易触发意外中断。引入 try...except 结构可将错误隔离,保障主流程不被单方面崩溃打断。
第1步:搭建try-except-finally基础框架
完整结构包含四个关键字段:try 存放可能抛出异常的代码、except 负责拦截匹配的类型、else 在无异常发生时执行补充逻辑、finally 无论成败均执行(常用于释放文件句柄或网络连接)。
try:
n = int(input("输入数字:"))
print(n)
except:
print("非有效数字格式")
else:
print("验证通过")
finally:
print("清理临时资源")
a = 3
print("后续代码正常运行")
第2步:针对具体错误类型进行拦截
生产环境中应避免使用裸 except: 吞没所有报错。明确指定异常子类可使排查更精准。
try:
num = int(input("请输入数字:"))
result = 100 / num
except ValueError:
print("格式无法转换为整数")
except ZeroDivisionError:
print("除数不能为零")
except Exception as e:
print(f"未知错误:{e}")
else:
print(f"计算结果:{result}")
finally:
print("任务收尾")
常见内置异常对照参考:
| 异常类名 | 触发条件 |
|---|---|
ValueError | 类型转换失败(如 int("abc")) |
ZeroDivisionError | 数学运算中除数为零 |
FileNotFoundError | 读取不存在的文件或路径错误 |
IndexError | 列表或序列下标越界 |
KeyError | 字典查询不存在的键 |
项目实战:超市计价系统的连续交互实现
某蔬菜摊位白菜单价固定为 2.5元/kg。为适应不同采购量制定阶梯折扣:小于2kg打9折;2~4kg打8折;4~10kg打6折;大于等于10kg打4折。需编写带校验与重复结算功能的脚本。
基础版可实现单次计算,但缺乏容错与循环能力:
try:
weight = float(input('请输入白菜的重量:'))
except:
print("输入错误,请重试")
if weight < 2.0:
print("请付款:", weight*2.5*0.9, '元')
elif weight < 4.0:
print("请付款:", weight*2.5*0.8, '元')
elif weight < 10.0:
print("请付款:", weight*2.5*0.6, '元')
else:
print("请付款:", weight*2.5*0.4, '元')

改进版将折扣判定与输入校验同步封装至 while True 循环中,形成连续接单模式:
while True:
try:
weight = float(input('请输入白菜的重量:'))
if weight < 2.0:
price = weight * 2.5 * 0.9
elif weight < 4.0:
price = weight * 2.5 * 0.8
elif weight < 10.0:
price = weight * 2.5 * 0.6
else:
price = weight * 2.5 * 0.4
print("请付款:", price, '元')
except:
print("输入无效,请重新录入")
该结构使程序在遇到非法字符时仅提示重输而不中断服务,满足高频交互需求。

流程控制要点总结
掌握Python条件、循环与异常的协作关系,能显著提升脚本的工程可用性。关键原则包括:优先使用 elif 扁平化分支以降低认知负荷;for 遍历优于手动管理索引;异常处理务必细化到具体错误类型并保留调试信息。以上就是Python流程控制之条件判断、循环与异常处理实战的详细教程,更多关于Python基础语法与工程实践的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









