网站首页 > 技术文章 正文
干货来了
1. 无限循环(未更新循环变量)
# 错误示例
count = 0
while count < 5:
print(count) # 忘记 count += 1
修复:
while count < 5:
print(count)
count += 1 # 确保条件能变为False
2. 修改正在迭代的序列
# 错误示例
words = ["hello", "world", "python"]
for word in words:
if len(word) < 5:
words.remove(word) # 导致跳过元素
修复:
# 方法1:迭代副本
for word in words.copy():
if len(word) < 5:
words.remove(word)
# 方法2:列表推导式
words = [word for word in words if len(word) >= 5]
3. 误用==代替=
# 错误示例(误将赋值写成比较)
while (status = get_status()) == "running": # SyntaxError
pass
# Python 3.8+ 用海象运算符
while (status := get_status()) == "running":
pass
# 旧版Python
while True:
status = get_status()
if status != "running":
break
4. 循环依赖全局变量
# 错误示例
results = []
def process_data():
for item in data: # 依赖未传入的全局变量data
results.append(item * 2)
修复:
def process_data(input_data): # 显式传入参数
return [item * 2 for item in input_data] # 避免修改全局变量
5. 忽略break和continue的作用域
# 错误示例
for i in range(3):
for j in range(3):
if i * j == 4:
break # 只跳出内层循环
print(i) # 外层循环继续执行
修复:
# 方法1:设置标志位
stop_flag = False
for i in range(3):
if stop_flag:
break
for j in range(3):
if i * j == 4:
stop_flag = True
break
# 方法2:将循环封装为函数
def find_target():
for i in range(3):
for j in range(3):
if i * j == 4:
return (i, j)
6. 不必要的嵌套循环
# 错误示例(O(n^2) 时间复杂度)
for x in range(1000):
for y in range(1000):
if x + y == 100:
print(x, y)
优化:
# 单层循环实现(O(n))
for x in range(1001):
y = 100 - x
if 0 <= y <= 1000:
print(x, y)
7. 忽略迭代器耗尽
# 错误示例
numbers = iter([1, 2, 3])
for n in numbers:
print(n)
# 再次迭代无输出
for n in numbers: # 迭代器已耗尽
print(n)
修复:
numbers = [1, 2, 3] # 使用列表可重复迭代
# 或重新创建迭代器
numbers = iter([1, 2, 3])
8. 错误处理循环中的异常
# 错误示例(异常导致循环中断)
urls = ["a.com", "b.com", "invalid"]
for url in urls:
response = requests.get(url) # 遇到无效URL整个循环终止
修复:
for url in urls:
try:
response = requests.get(url)
except requests.RequestException:
print(f"跳过无效URL: {url}")
continue # 继续下一次循环
9. 误用range参数
# 错误示例(反向迭代漏掉首项)
for i in range(5, 0): # 实际不会执行
print(i)
for i in range(5, 0, -1): # 添加步长-1
print(i) # 输出5,4,3,2,1
10. 忽略生成器的惰性特性
# 错误示例(生成器只能迭代一次)
squares = (x**2 for x in range(5))
print(sum(squares)) # 30
print(sum(squares)) # 0(生成器已耗尽)
修复:
# 方法1:转换为列表
squares = list((x**2 for x in range(5)))
# 方法2:重新创建生成器
def get_squares():
return (x**2 for x in range(5))
print(sum(get_squares()))
循环调试技巧
- 打印关键变量:
for i in range(3):
print(f"[DEBUG] i={i}") # 跟踪循环状态
- 使用 enumerate 定位问题项:
for idx, item in enumerate(data):
if item is None:
print(f"第{idx}项为空")
- 设置安全计数器:
max_iterations = 1000
while condition and max_iterations > 0:
max_iterations -= 1
总结:循环最佳实践
- 优先用 for 循环:当迭代次数明确时
- 确保循环能终止:检查条件变量是否更新
- 避免修改迭代中的集合:操作副本或新建集合
- 复杂逻辑封装函数:减少嵌套层次
这些错误覆盖了 90% 的实际开发场景,掌握后能显著提升代码健壮性!
- 上一篇: Python循环语句实用教程
- 下一篇: Python | for 循环
猜你喜欢
- 2025-05-21 Python while循环深度解析:从基础到实战,一文全掌握!
- 2025-05-21 一文讲清Python For循环的概念和用法
- 2025-05-21 Python | for 循环
- 2025-05-21 Python循环语句实用教程
- 2025-05-21 Python 中的循环语句有哪些?看看全不全
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)