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

如何正确获取Pygments guess_lexer返回的Lexer类名?

优雅获取Pygments识别出的Lexer类名

嘿,你完全不用搞继承重写或者字符串处理这种麻烦事!Python本身就提供了直接获取类名的标准方式,而Pygments的Lexer类也完美支持这一点,绝对优雅。

直接访问类的__name__属性

guess_lexer()返回的其实是对应的Lexer子类(比如PythonLexer)的类对象,而Python中每个类都有一个__name__属性,直接存储了类的名称字符串,完全就是你想要的部分!

修改你的代码如下:

from pygments.lexers import guess_lexer

text = "string containing source code"
lexer_cls = guess_lexer(text)
print(lexer_cls.__name__)  # 输出:PythonLexer

为什么这是最优方案?

  • Pythonic:这是Python获取类名的标准做法,符合语言设计的本意
  • 可靠:不像字符串分割(比如str(lexer_cls).split('.')[-1].strip('>'))依赖Pygments的__repr__格式,哪怕Pygments内部模块结构调整,__name__属性也不会变
  • 简洁:一行代码就能搞定,完全不需要额外的处理逻辑

额外说明:如果是Lexer实例怎么办?

如果你后续创建了Lexer的实例(比如lexer = lexer_cls()),想要获取它的类名,只需要访问实例的__class__.__name__:

lexer = lexer_cls()
print(lexer.__class__.__name__)  # 同样输出:PythonLexer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:25