You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Colab环境运行Python代码出现死循环、未达预期迭代效果问题

Colab中运行代码出现无限循环的问题排查

核心问题定位

  • 循环逻辑失效:内层for循环里的break语句仅能跳出当前所属的最内层循环,无法终止外层的while True死循环。只要内层for遍历完密钥的全部字符,外层循环就会立刻开启下一轮遍历,完全没有终止机制。
  • 变量未定义的硬错误:
    • 初始列表[a, b, c]里的a、b、c没有加引号,属于未定义的标识符,直接运行会触发NameError
    • 长度判断用到的encrypt_text变量全程没有定义,代码运行时根本获取不到目标长度,永远无法满足len(key_letters) == len(encrypt_text)的判断条件
  • 缩进语法错误:if len(key_letters) == len(encrypt_text):语句前多了一层缩进,和for循环内的代码块层级不匹配,Python解释器运行时会直接抛出IndentationError,根本无法执行长度判断的逻辑
  • 逻辑冗余:本身要实现“密钥循环填充至和明文等长”的Vigenère密码标准逻辑,用双层死循环实现很容易出现漏洞,完全可以通过更简洁的逻辑完成。

修正实现代码

你原本的预期目标是:让key_letters按encryption_key的内容循环填充,直到总长度和待加密文本长度一致,避免无限循环。

# 提前定义所有依赖变量,补上缺失的字符串引号
key_letters = ['a', 'b', 'c']
encryption_key = 'hello world'
# 必须先定义待加密文本变量,否则无法计算目标长度
encrypt_text = "你的实际待加密内容"

# 计算还需要补充多少个密钥字符才能达到目标长度
remaining_length = len(encrypt_text) - len(key_letters)
# 按取模逻辑循环截取密钥字符,不需要死循环
fill_content = [encryption_key[i % len(encryption_key)] for i in range(remaining_length)]
# 拼接得到最终的密钥列表
key_letters += fill_content

无限循环的触发原理

举个具象的例子:假设encrypt_text总长度为15,encryption_key长度为11。内层for循环每完整跑一轮,就会往key_letters里添加11个元素。即使某次循环添加完刚好凑到15的长度,执行break也只是跳出了内层的for循环,外层的while True根本没有终止判断,会立刻进入下一轮循环重新开for遍历,继续往列表里追加元素。之后列表长度只会越来越长,再也无法回到“长度等于encrypt_text”的判断点,就会进入永远跑不完的死循环,在Colab里表现为代码一直转圈没有输出。


内容的提问来源于stack exchange,提问作者Tiffany Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 20:06:00