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") # 建议加换行符,避免多个用户名挤在同一行
额外优化小细节
len(user)本身返回整数,无需额外用int()转换,简化代码。- 写入文件时追加
\n,让每个用户名单独占一行,方便后续读取和管理。
修改后函数会稳定返回符合要求的用户名字符串,不会再出现返回None的情况。
内容的提问来源于stack exchange,提问作者Luis Alfonso
相关产品推荐
相关产品推荐

