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

Python密码校验函数中的while循环为何会无限运行?

get_password()无限循环问题根因定位

核心问题原因

你的代码出现无限循环是两个逻辑错误共同导致的:

  • 递归调用未修改当前作用域的循环判断变量
    当首次输入的密码不符合长度规则时,当前函数作用域内的password会被赋值为None,随后进入while循环。循环内你直接递归调用get_password(),这会生成全新的独立函数调用栈,递归调用中获取到的合法密码只会在子调用的作用域内返回,完全不会修改当前外层函数里值为None的password变量。
  • while循环无任何终止触发条件
    外层函数中控制循环的password变量从进入循环开始就一直保持None值,循环体内既没有对该变量重新赋值的逻辑,也没有break类的跳出语句,password is None的判断条件永远成立,因此循环会无限执行。

额外逻辑缺陷:你将while循环放在了if password is not None的判断块内,如果首次调用passwd()就返回None(用户首次无输入),代码根本不会进入重输引导逻辑,会直接返回None,和你预期的「持续引导直到输入有效密码」逻辑不符。

修复示例

去掉无意义的递归,直接在循环内完成输入获取、校验、变量更新即可:

def get_password():
    password = passwd()
    # 只要密码不合法就持续循环重输
    while password is None or len(password) < 7 or len(password) > 16:
        # 对已输入但不符合长度规则的场景打印提示
        if password is not None:
            if len(password) < 7:
                print("Minimum length of password is 6. Please try again.")
            elif len(password) > 16:
                print("Maximum length of password is 16. Please try again.")
        # 重新获取输入,更新当前作用域的password变量
        password = passwd()
    return password

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:15:33