Python实现longest_lines函数读取文件报NameError问题求助
问题原因及修复方案
1. 直接报错原因:调用方式错误
你传递的文件名没有加引号,Python会将words100.txt识别为变量名而非字符串,自然会触发NameError。正确的调用方式应为:
longest_lines("words100.txt")
2. 代码本身存在的可修复问题
- 文件操作未安全关闭:直接调用
open()读取后没有执行close(),存在资源泄漏风险,推荐使用with上下文管理器处理文件读取 - 冗余类型转换:
len()返回值本身就是整数,不需要额外用map(int, ...)做二次转换 - 行拆分逻辑不严谨:直接用
split("\n")处理换行可能存在跨平台兼容问题,splitlines()是更稳妥的换行拆分方法;直接对整个文件内容做strip()会丢失首尾的空行,如果你需要统计所有原始行不建议这么做 - filter判断逻辑不规范:filter接收的判断函数应该返回布尔值,你当前的实现返回匹配的字符串本身,虽然逻辑上能跑,但可读性差且容易出意外
- 返回值错误:你最后返回的是
print(l2)的执行结果,而print()函数的返回值是None,不符合你“返回最长行列表”的需求
优化后的参考代码
def longest_lines(file_name): # 用with上下文管理器自动处理文件关闭 with open(file_name, "r", encoding="utf-8") as f: # 直接读取所有行,自动处理换行 lines = f.read().splitlines() # 计算最大行长度 max_len = max(len(line) for line in lines) # 直接筛选长度等于最大长度的行 return [line for line in lines if len(line) == max_len]
内容的提问来源于stack exchange,提问作者wei guo
相关产品推荐
相关产品推荐

