为何执行write操作时提示不能为int,转字符串后又出现‘请输入数字’提示?
问题分析与解决
- write操作报错根源:
file.write()执行后返回的是写入的字节数(整数类型),你把这个返回值重新赋值给了newpassword,后续若用到该变量必然触发类型错误。而且你写完文件后立刻把newpassword改成原密码,完全是多余操作。 - 输入提示矛盾原因:你直接把输入转成字符串写入,但系统要求密码必须是数字,所以得先验证用户输入的是数字,再转成字符串写入,否则非数字内容会被写入,导致后续密码校验不通过。
修复后的代码
def pinchange(): while True: user_passwordpinchange = input("Please enter the correct password") try: # 先验证原输入是数字,再和原密码比较 if int(user_passwordpinchange) == password: print("Correct password") while True: newpassword_input = input("Enter new password here") # 验证新密码是数字 if newpassword_input.isdigit(): break print("请输入数字") # 写入文件时直接用验证后的输入,不要接收write的返回值 pinpasswordfilename1.write(newpassword_input) # 如果需要更新内存中的密码变量,用验证后的新密码 password = int(newpassword_input) pinpasswordfilename1.close() break else: print("密码错误,请重新输入") except ValueError: print("请输入数字密码")
关键修改点
- 去掉冗余的
str()转换,新增数字验证逻辑(用isdigit()或int()转换捕获异常),解决“请输入数字”的提示问题 - 不再将
write()的返回值赋值给变量,该返回值仅表示写入长度,无业务用途 - 正确更新内存中的密码变量(若业务需要)
内容的提问来源于stack exchange,提问作者Hassaan Khan
相关产品推荐
相关产品推荐

