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

为何执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:51:07