You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Python关键字与标识符统计程序的问题排查

问题排查与修正方案

咱们一步步梳理你代码里的问题,然后调整成符合需求的版本:

现存问题分析

  • 缺少用户输入文件名的逻辑:你直接硬编码了source.py,没有按照需求提示用户输入目标文件路径
  • 未实现标识符统计:代码只处理了关键字的计数,完全没覆盖变量、类、方法名这类标识符的统计需求
  • token筛选逻辑不严谨:tokenize生成的token包含多种类型,你直接过滤关键字,但标识符对应的是NAME类型的token(关键字也属于NAME类型),需要先筛选出NAME类型的token再分类处理

修正后的完整代码

import tokenize
import keyword
import collections

# 提示用户输入文件名
filename = input("请输入Python源码文件路径:")

try:
    with open(filename, 'r', encoding='utf-8') as f:
        # 生成token迭代器,同时获取token类型
        tokens = tokenize.generate_tokens(f.readline)
        
        keyword_counter = collections.Counter()
        identifier_counter = collections.Counter()
        
        for token_type, token_str, _, _, _ in tokens:
            # 只处理NAME类型的token(关键字、标识符都属于这类)
            if token_type == tokenize.NAME:
                if keyword.iskeyword(token_str):
                    keyword_counter[token_str] += 1
                else:
                    identifier_counter[token_str] += 1

    # 输出统计结果
    print("=== 关键字出现次数 ===")
    for kw, count in keyword_counter.most_common():
        print(f"{kw}: {count}")
    
    print("\n=== 标识符出现次数 ===")
    for ident, count in identifier_counter.most_common():
        print(f"{ident}: {count}")

except FileNotFoundError:
    print(f"错误:未找到文件 {filename}")
except Exception as e:
    print(f"处理文件时发生错误:{str(e)}")

关键修改说明

  • 添加用户输入交互:用input()函数获取用户输入的文件路径,满足需求要求
  • 区分关键字与标识符:先筛选tokenize.NAME类型的token(这是Python中命名类token的统一类型),然后用keyword.iskeyword()判断,分别加入两个计数器
  • 增加异常处理:处理文件不存在、编码错误等常见异常,提升程序健壮性
  • 优化输出格式:把两个统计结果分模块展示,更易读

补充说明

Python的tokenize模块会自动过滤源码中的注释、字符串、数字等非命名类内容,所以我们只需要关注NAME类型即可,不用担心把注释里的单词误统计进去;collections.Counter的most_common()方法会按出现次数从高到低排序输出,方便查看结果。

内容的提问来源于stack exchange,提问作者Emre Alpogunc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:51