如何解决Python统计文件非注释非空SLOC时输出0的问题
问题排查与修复
你代码出现输出为0的问题主要存在以下几处错误:
count变量初始化位置错误:你将count=0写在for循环内部,每次遍历新行时都会把count重置为0,循环结束后自然只能得到0或1的结果- 统计逻辑完全反向:当前判断条件
l.strip() and l.startswith('/')实际是在统计非空的注释行,和你要统计非注释、非空有效代码行的需求完全相反 - 未适配Java注释规则:仅判断行开头是否为
/无法覆盖所有注释场景,还需要额外处理//单行注释、/* */多行注释 - 缺少文件资源管理逻辑:文件打开后没有显式关闭,可能出现资源占用问题
简易修复版本(仅处理空行、单行//注释,适配无多行注释的文件)
# 把count初始化放在循环外 count = 0 # 用with语句自动管理文件资源,不需要手动关闭 with open("/content/drive/MyDrive/Rental.java", "r", encoding="utf-8") as f: for line in f: stripped_line = line.strip() # 判断条件:非空,且不是以//开头的单行注释 if stripped_line and not stripped_line.startswith('//'): count += 1 print(count)
完整功能版本(支持过滤/* */格式的多行注释)
count = 0 in_multiline_comment = False # 标记当前是否处于多行注释区间内 with open("/content/drive/MyDrive/Rental.java", "r", encoding="utf-8") as f: for line in f: stripped_line = line.strip() # 跳过空行 if not stripped_line: continue # 处理多行注释逻辑 if in_multiline_comment: if '*/' in stripped_line: in_multiline_comment = False continue if stripped_line.startswith('/*'): in_multiline_comment = True # 处理单行包裹的多行注释,比如/* 注释内容 */ if '*/' in stripped_line: in_multiline_comment = False continue # 过滤单行注释后计数 if not stripped_line.startswith('//'): count += 1 print(count)
内容的提问来源于stack exchange,提问作者Sehreen Zehra
相关产品推荐
相关产品推荐

