为何Python文件在VS Code外运行异常?输入后程序直接闪退
问题分析与修复方案
核心问题
程序输入后直接关闭,本质是未处理的异常触发崩溃,具体问题有这些:
- 路径转义错误:Windows路径里的
\会被Python当成转义字符(比如\D、\F),导致找不到文件,直接触发FileNotFoundError崩溃。 - 输入容错缺失:如果用户输入非数字,
int(input())会抛出ValueError,程序直接退出。 - 文件读取逻辑bug:文件调用
read()后指针会跑到末尾,后续再读就拿不到内容;而且原代码里选Part Two时错误调用了Part One的文件。 - 逻辑分支不全:用户输入2要退出,但代码没处理这个分支,直接进入循环;也没有退出循环的选项。
修复后的完整代码
print("Example Text") # 处理start输入的非整数情况 while True: try: start = int(input(""" To start, press 1. To leave, press 2.""")) break except ValueError: print("请输入1或2!") # 处理start的退出逻辑 if start == 2: exit() elif start != 1: print("无效输入,程序退出") exit() # 用原始字符串避免路径转义,同时预读取文件内容 file_paths = { "full": r"Files\Documents\Full.txt", "part1": r"Files\Documents\Part 1.txt", "part2": r"Files\Documents\Part 2.txt", "part3": r"Files\Documents\Part 3.txt" } # 读取文件并捕获找不到文件的异常 try: with open(file_paths["part1"], 'r', encoding='utf-8') as f: part1_content = f.read() with open(file_paths["part2"], 'r', encoding='utf-8') as f: part2_content = f.read() with open(file_paths["part3"], 'r', encoding='utf-8') as f: part3_content = f.read() with open(file_paths["full"], 'r', encoding='utf-8') as f: full_content = f.read() except FileNotFoundError as e: print(f"找不到文件:{e.filename}") input("按回车键退出...") exit() # 主循环逻辑 while True: print("""Which part do you want to view? 1. Part One 2. Part Two 3. Part Three 4. All of it 5. Exit """) # 处理segment输入的非整数情况 try: segment = int(input()) except ValueError: print("请输入1-5之间的数字!") continue # 分支逻辑修复 if segment == 1: print(part1_content) elif segment == 2: print(part2_content) elif segment == 3: print(part3_content) elif segment == 4: print(full_content) elif segment == 5: print("程序退出") break else: print("无效选项,请重新输入!") # 输出后暂停,防止内容一闪而过 input("\n按回车键继续...")
关键修复点说明
- 路径处理:用
r"路径"原始字符串,避免转义字符干扰,确保系统能找到文件。 - 异常捕获:给输入转换、文件读取加
try-except,出错时给出提示,不会直接崩溃。 - 文件读取优化:用
with语句自动关闭文件,提前把内容读到变量里,解决重复读取空内容的问题。 - 逻辑补全:添加start输入的退出分支,主循环加退出选项,避免无限循环。
- 暂停提示:每次输出后加
input()暂停,尤其是生成exe后,能看清输出内容。
生成exe注意事项
如果用pyinstaller打包,命令用:
pyinstaller --onefile your_script.py
打包完成后,把Files文件夹复制到dist目录下,和exe放在同一层级,不然会找不到文件。
内容的提问来源于stack exchange,提问作者GabeCodes
相关产品推荐
相关产品推荐

