Prhub

#25252 [Lint] Fix `Optional[X] = (None,)` typo defaults in two dataclasses

原始 PR 作者 alphabetc1 合并时间 2026-05-15 15:32 文件变更 2 提交数 1 评论 1 代码增减 +4 / -4

执行摘要

修复 dataclass 默认值中 (None,) 的 typo

在 dataclass 中,Optional[X] = None, 中的尾随逗号会使得 Python 将其解析为 Optional[X] = (None,),导致类型标注与默认值不匹配。虽然所有调用方均显式传参,默认值不会被实际使用,但保持类型一致性有助于静态分析与代码可读性。

无需深入阅读,但值得作为 Python dataclass 默认值陷阱的案例学习。

讨论亮点

无 review 评论,合入者直接合并。

实现拆解

  1. python/sglang/srt/mem_cache/hicache_storage.py: 将 HiCacheStorageExtraInfo.prefix_keys 的默认值从 (None,) 改为 None
  2. python/sglang/lang/ir.py: 将 SglSamplingParams 中三个字段的默认值从 (None,) 改为 Nonelogprob_start_len, top_logprobs_num, return_text_in_logprobs
文件 模块 状态 重要度
python/sglang/lang/ir.py 语言层 modified 5.19
python/sglang/srt/mem_cache/hicache_storage.py 缓存层 modified 4.49

关键源码片段

python/sglang/lang/ir.py core-logic

修复了 SglSamplingParams 中三个字段的默认值 typo,是 PR 的核心变更文件之一。

@dataclasses.dataclass
class SglSamplingParams:
    # ... 其他字段 ...
    return_logprob: Optional[bool] = None
    # 以下三个字段修复前默认值为 (None,)
    logprob_start_len: Optional[int] = None # 原为 (None,)
    top_logprobs_num: Optional[int] = None # 原为 (None,)
    return_text_in_logprobs: Optional[bool] = None # 原为 (None,)
    json_schema: Optional[str] = None

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低:所有四个字段的调用方均显式传参,默认值从未被依赖。但若未来有新增代码依赖这些默认值,可能会因为类型从 (None,) 变为 None 而引入细微变化(如 if field: 的行为不变,但 for x in field: 将引发 TypeError)。

影响范围小,仅涉及两个文件中的四个字段默认值变更,无运行时行为变化。对用户无感知,对系统稳定性无影响。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论