# PR #25252 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[Lint] Fix `Optional[X] = (None,)` typo defaults in two dataclasses
- 合并时间：2026-05-15 15:32
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/25252

---

# 执行摘要

- 一句话：修复 dataclass 默认值中 (None,) 的 typo
- 推荐动作：无需深入阅读，但值得作为 Python dataclass 默认值陷阱的案例学习。

# 功能与动机

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

# 实现拆解

1. **`python/sglang/srt/mem_cache/hicache_storage.py`**: 将 `HiCacheStorageExtraInfo.prefix_keys` 的默认值从 `(None,)` 改为 `None`。
2. **`python/sglang/lang/ir.py`**: 将 `SglSamplingParams` 中三个字段的默认值从 `(None,)` 改为 `None`：`logprob_start_len`, `top_logprobs_num`, `return_text_in_logprobs`。

关键文件：
- `python/sglang/lang/ir.py`（模块 语言层；类别 source；类型 core-logic；符号 SglSamplingParams）: 修复了 SglSamplingParams 中三个字段的默认值 typo，是 PR 的核心变更文件之一。
- `python/sglang/srt/mem_cache/hicache_storage.py`（模块 缓存层；类别 source；类型 core-logic；符号 HiCacheStorageExtraInfo）: 修复了 HiCacheStorageExtraInfo 中 prefix_keys 字段的默认值 typo，是 PR 的另一个核心变更文件。

关键符号：未识别

## 关键源码片段

### `python/sglang/lang/ir.py`

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

```python
@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

```

# 评论区精华

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

- 暂无高价值评论线程

# 风险与影响

- 风险：风险极低：所有四个字段的调用方均显式传参，默认值从未被依赖。但若未来有新增代码依赖这些默认值，可能会因为类型从 `(None,)` 变为 `None` 而引入细微变化（如 `if field:` 的行为不变，但 `for x in field:` 将引发 `TypeError`）。
- 影响：影响范围小，仅涉及两个文件中的四个字段默认值变更，无运行时行为变化。对用户无感知，对系统稳定性无影响。
- 风险标记：暂无

# 关联脉络

- PR #24691 [UnifiedTree]: Support HiCache For DeepSeek_V4: 本 PR 修改了 HiCache 相关的 dataclass 默认值，与 HiCache 功能线相关。