Repository navigation
Commit abfd0ab
fix: 收尾 CI 剩余三处失败——Event 竞态加 timeout,两个 3.12+ 语法块加 skip
73e0e7d 推送后 CI 仍红,四个版本失败数 3.10=2 / 3.11=3 / 3.12=0 / 3.13=1。
差异全部来自版本语法特性,不再是此前的环境抖动(stdin 与超时已在上一个
commit 修掉),说明那次修复方向是对的,只是我的本地验证没覆盖到。
三处失败逐个对应处理:
- python13/2.md 的 Event 示例(3.11 与 3.13 触发 timeout):`if event.isSet()`
与 `event.clear()` 之间不是原子操作,两个线程可能都通过判断、都进 wait(),
而只有一个 set() 来唤醒,剩下那个永久阻塞。改为 event.wait(timeout=1),
即使竞态触发也必定在 1 秒后返回。这是逻辑兜底而非降低概率。本地连跑 30 次
全部正常、最长 0.02 秒(正常路径不会真等满 1 秒)。
- python2/Type_of_data.md:442 与 python6/3.md:422(3.10 与 3.11 触发
SyntaxError):分别是 PEP 701 的 f-string 内嵌同类引号、PEP 695 的 type
语句,都需要 3.12+。两处正文本就写明「Python 3.12+」,前者甚至明说
「在 3.11 及之前是错的」——它们在低版本失败正是教程要表达的事实,不是
错误,故加 skip-ci。没有为此给 example_runner 扩「最低版本」标记机制:
只有 2 个块受影响且正文已用文字说明,不值当。
验证方法的修正(上一轮就栽在这里):本机只有 Python 3.14,CI 跑 3.10~3.13,
「本地全绿」推不出「CI 会绿」。本轮改用 ast.parse(code, feature_version=...)
对 491 个未 skip 块 × 四个版本做语法检查,0 处不兼容,不必装多版本 Python。
运行时层面的版本差异本地仍测不出,最终以 CI 为准。
本地全量:总计 691 块;跳过 200;失败 0;exit 0。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EKcB6SFyeRo9UPJL99QvkC1 parent 73e0e7d commit abfd0ab
3 files changed
Lines changed: 5 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
352 | 352 | | |
353 | 353 | | |
354 | 354 | | |
355 | | - | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
356 | 358 | | |
357 | 359 | | |
358 | 360 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
439 | 439 | | |
440 | 440 | | |
441 | 441 | | |
| 442 | + | |
442 | 443 | | |
443 | 444 | | |
444 | 445 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
419 | 419 | | |
420 | 420 | | |
421 | 421 | | |
| 422 | + | |
422 | 423 | | |
423 | 424 | | |
424 | 425 | | |
| |||
0 commit comments