Windows10下Python3.9程序接收输入后立即闪退问题求助
问题原因排查
程序直接退出的核心原因有3个:
- 函数调用顺序错误:Python是顺序解释执行的,你在代码第33、34行调用
register_a()、log_in()的时候,这两个函数还没有被定义(定义在调用代码的下方),执行到此处会直接抛出NameError报错退出,如果你是直接双击运行py文件,终端会闪退看不到报错信息。 - 文件操作存在多处语法和逻辑错误:
- 所有的
f.close都漏写了括号,正确写法是f.close(),漏写括号不会实际执行关闭文件的操作,会导致资源占用、内容未写入磁盘的问题。 log_in函数第一行打开文件用了"a"追加模式,该模式不支持读取操作,后续调用readline()会直接报错。- 写入用户名和密码时没有添加换行符或者分隔符,两个内容会直接拼接成一个字符串存储,后续读取时无法拆分出独立的用户名和密码,永远无法匹配成功。
- 所有的
- 全局变量未声明:
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
相关产品推荐
相关产品推荐

