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

Windows10下Python3.9程序接收输入后立即闪退问题求助

问题原因排查

程序直接退出的核心原因有3个:

  • 函数调用顺序错误:Python是顺序解释执行的,你在代码第33、34行调用register_a()、log_in()的时候,这两个函数还没有被定义(定义在调用代码的下方),执行到此处会直接抛出NameError报错退出,如果你是直接双击运行py文件,终端会闪退看不到报错信息。
  • 文件操作存在多处语法和逻辑错误:
    1. 所有的f.close都漏写了括号,正确写法是f.close(),漏写括号不会实际执行关闭文件的操作,会导致资源占用、内容未写入磁盘的问题。
    2. log_in函数第一行打开文件用了"a"追加模式,该模式不支持读取操作,后续调用readline()会直接报错。
    3. 写入用户名和密码时没有添加换行符或者分隔符,两个内容会直接拼接成一个字符串存储,后续读取时无法拆分出独立的用户名和密码,永远无法匹配成功。
  • 全局变量未声明:log_in函数中修改的logged是局部变量,不会生效,需要加global logged声明才能修改全局的logged变量。

修复后的可运行代码

import os, time

os.system("color")
loading = 0
logged = 0
r = "r"
l = "l"
COLOR = {
    "PURPLE": "\033[95m",
    "BLUE": "\033[0;34m",
    "GREEN": "\033[0;32m",
    "RED": "\033[91m",
    "GRAY": "\033[0;39m",
    "CYAN": "\033[0;36m",
    "CLR": "\033[0m",
}

# 函数定义移到调用之前
def register_a():
    print(COLOR["BLUE"], "\n\n new username: ", COLOR["CLR"])
    username = input("->  ")
    print(COLOR["RED"], "\n\n new password: ", COLOR["CLR"])
    password = input("->  ")
    print("writing credentialz.txt file..")

    f = open("credentialz.txt", "w")
    f.write(username + "\n") # 加换行符分隔用户名密码
    f.close()
    f = open("credentialz.txt", "a")
    f.write(password + "\n")
    f.close() # 补全括号
    return username, password


def log_in():
    f = open("credentialz.txt", "r") # 改为读模式
    a = f.readline().strip() # 去掉末尾的换行符
    b = f.readline().strip()
    f.close() # 补全括号
    useratt = input("USERNAME: ")
    passatt = input("PASSWORD: ")
    if useratt == a and passatt == b:
        print(COLOR["BLUE"], "LOGGED IN SUCCESSFULLY!", COLOR["CLR"])
        global logged # 声明全局变量
        logged = 1
    else:
        print(COLOR["RED"], "WRONG USERNAME/PASSWORD!", COLOR["CLR"])

print(COLOR["GRAY"], "starting", COLOR["CLR"], "\bSh", COLOR["CYAN"], "\b\bi", COLOR["CLR"], "\b\bftOS...")

while loading <= 10:
    for rod in r'--//||\\':
        print(rod, rod, rod, rod, rod, rod, rod, rod, rod, rod, rod, end='\r')
        time.sleep(0.05)
        loading = loading + 1
###############################
yesno = input("register or login? (r/l) -> ")
if yesno == r:
    register_a()
if yesno == l:
    log_in()

# 加一行阻塞,避免程序运行完直接退出
input("按任意键退出...")

额外注意事项

如果要双击运行py文件不闪退,可以在代码最后加input()语句阻塞程序,等你看完输出按任意键再退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:45:01