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

Python函数返回None问题求助:无法写入用户名到Username.txt

问题分析与修复

你的函数返回None的核心问题是多余的if判断给代码埋下了无返回值的隐患——其实前面的while循环已经帮你过滤掉了所有不符合要求的输入,循环结束后剩下的user必然满足规则,完全不需要再加一层if判断来重复验证。

原代码的问题点

看你的函数结构:

def username_input(user):
    user_len = int(len(user))
    while user_len > 12 or not (user.isalnum()):
        print("Error: the username must be an alphanumeric value \nand have as maximum 12 characters")
        user = input("Type a valid username: ")
        user_len = int(len(user))
    if user_len <= 12 and user.isalnum():
        return user

虽然逻辑上while循环结束后,user肯定符合长度≤12且是字母数字组合的要求,if条件一定会成立,但这种冗余写法不仅没必要,还可能在后续修改代码(比如调整while的判断逻辑)时,意外导致if不触发,此时函数会默认返回None。

修复后的代码

去掉多余的if判断,直接在while循环结束后返回user即可:

def username_input(user):
    user_len = len(user)  # len()本身就是整数,不需要用int()转换
    while user_len > 12 or not user.isalnum():
        print("Error: the username must be an alphanumeric value \nand have a maximum of 12 characters")
        user = input("Type a valid username: ")
        user_len = len(user)
    return user  # 循环结束后直接返回,必然符合要求

with open("Username.txt", "a") as usr_txt:
    usr = username_input(user = input("Type a username: "))
    usr_txt.write(usr + "\n")  # 建议加换行符,避免多个用户名挤在同一行

额外优化小细节

  1. len(user)本身返回整数,无需额外用int()转换,简化代码。
  2. 写入文件时追加\n,让每个用户名单独占一行,方便后续读取和管理。

修改后函数会稳定返回符合要求的用户名字符串,不会再出现返回None的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:46:11