Python3.9统计主题行代码在VSCode及命令行运行报错求助
问题根因
- 你是直接将整段代码逐行粘贴到Python交互式终端(
>>>界面)运行的:执行到fname = input()时,程序会等待用户输入要读取的文件名,但你此时直接粘贴了下一行代码fhand = open(fname)作为input()的输入值,导致fname变量被赋值为字符串"fhand = open(fname)" - 后续程序尝试打开这个不存在的文件名时触发异常,
open()执行失败所以fhand变量没有被成功定义,进而抛出NameError: name 'fhand' is not defined报错。
修复方案
方案1:脚本文件运行(推荐)
将完整代码保存为后缀为.py的文件(例如count_subject.py),在终端中执行命令python count_subject.py,运行到输入提示时输入你要读取的实际文件路径/文件名,按下回车即可正常运行。
方案2:交互式终端正确运行步骤
如果要在>>>交互式终端运行,按以下顺序操作:
- 输入
fname = input()按下回车,此时终端进入等待输入状态,直接输入你要读取的文件完整名称(例如mbox.txt),按下回车确认 - 再逐行输入剩下的代码,每行输入完按回车执行即可
代码优化建议
可以给文件读取操作加上异常捕获和资源自动管理,避免文件不存在时直接崩溃、文件资源泄露问题,优化后代码参考:
fname = input("请输入要读取的文件名:") count = 0 try: # with语句会自动关闭文件,无需手动调用fhand.close() with open(fname, 'r', encoding='utf-8') as fhand: for line in fhand: if line.startswith('Subject:'): count += 1 print(f'There were {count} subject lines in {fname}') except FileNotFoundError: print(f"错误:未找到名为 {fname} 的文件,请检查文件名是否正确")
内容的提问来源于stack exchange,提问作者itsnotreallyme
相关产品推荐
相关产品推荐

