

# 如何检查 YouTube 编程教程现在是否仍然有效

要检查旧 YouTube 教程是否适用于你的软件版本，先记录教程声明的版本和画面中显示的确切步骤。将这些步骤与你所用版本的官方文档进行比较。然后在自己的电脑上测试一个无害的示例。将结果保存在版本与步骤对照表中。在跟随完整教程操作之前，明确保留已更改的指令和未解决的步骤。

先查看视频、你使用的软件和官方文档。短教程可以手动核查。带时间信息的字幕可以帮助你在较长的视频中查找指令。但字幕无法确认画面中的代码，也不能证明代码有效。

最终得到的表格会说明你核查了什么、哪些内容有变化，以及哪些内容仍需证据。它帮助你针对一个教程任务，在一个明确的软件配置下作出决定。

## 1. 明确任务并记录两个版本

选定一个你希望通过教程得到的结果。例如，你可能想从文本中移除完全匹配的前缀。前缀是位于一段较长文本开头的文本。

将任务范围缩小到可以核查的程度。“这个文本操作有效吗？”可以转化为明确的测试。“这门编程课现在还好吗？”则不能。

一个[公开的编程问题](https://www.reddit.com/r/learnprogramming/comments/1gz6km5)问道：“我能只靠 YouTube 视频和大量练习学会编程吗？”所提供的证据显示，回复提到了软件版本过时的问题。这说明练习前有必要核查软件配置。仅凭这一个问题，无法衡量有多少学习者遇到了这个问题。

复制操作指令前，先记录以下信息：

1. 教程标题和视频网址。
2. 发布日期（如果已知）。
3. 教程声明的软件名称和版本。
4. 教程中声明该版本的位置。
5. 你实际将使用的软件版本。
6. 核查日期。
7. 你希望复现的那个结果。

环境是指你进行操作时使用的软件配置。如果其他配置会影响所选步骤，也要将其记录下来。例如，教程指定了某个必需工具的版本时，就记录该版本。

将发布日期与软件版本分开记录。近期上传的视频不能证明其中的指令适用于你的版本。很早上传的视频也不能证明其中的每条指令都已失效。

如果教程未给出版本，就填写“未知”。不要根据视频的年代或外观猜测。如果无法确认自己使用的版本，先补齐这项信息，再声称版本匹配。

## 2. 找到每条指令并查看画面

观看执行所选任务的视频片段。在每个必需操作处暂停。提出修改之前，先原样记录画面中的操作指令。

字幕是随视频保存的一段文字。字幕稿将这些字幕文字汇集起来。带时间信息的片段是指具有开始时间和结束时间的一段字幕。

用字幕查找可能相关的片段，然后观看这些片段。讲解者可能只说“运行这个”，而完整命令只显示在画面上。字幕也可能写错软件名称，或遗漏没有口头说明的操作。

对于较长的视频，可以使用[在长讲座中查找一个概念](/zh-Hans/articles/%E5%9C%A8%E9%95%BF%E7%AF%87%E6%B2%B9%E7%AE%A1%E8%AE%B2%E5%BA%A7%E4%B8%AD%E6%9F%A5%E6%89%BE%E6%A6%82%E5%BF%B5%E8%AE%B2%E8%A7%A3/)中按具体目标定位片段的方法。这里的目的是找到需要核实的指令，无需为整节课建立索引。

对每个必需步骤，执行以下操作：

1. 保存该指令出现时的视频时间。
2. 阅读画面中的代码、菜单选项或设置。
3. 记录紧接该指令之前展示的配置。
4. 保留原始指令。
5. 将看不清的文字标为“未解决”。

不要把口头讲解当作提取出的代码。下文介绍的字幕工具不进行光学字符识别。这个术语指从图像中识别文字。你必须亲自检查画面。

“成功了”这样的评论可以提供核查线索，但不能确认兼容性。兼容性是指某条指令能在相关软件版本中正常运行。评论可能没有说明软件版本或使用的确切步骤。

如果评论提到按钮缺失或出现错误，先将评论与实际视频片段进行比较，再将其用作证据。[将评论与教程片段进行核对](/zh-Hans/articles/%E9%80%9A%E8%BF%87youtube%E8%AF%84%E8%AE%BA%E8%AE%A8%E8%AE%BA%E6%9F%A5%E6%89%BE%E6%95%99%E7%A8%8B%E4%B8%8D%E8%B6%B3/)介绍了这项单独的核查方法。在确认评论所用的配置及其相关性之前，只将它视为线索。

## 3. 按需使用带时间信息的字幕

[YouTube Transcript Scraper](https://apify.com/chronometrica/youtube-transcript-scraper) 是一个 Actor，即托管运行的数据采集程序。文档说明，它在这里的用途是读取已有的公开字幕。你仍需自己识别指令、检查画面、阅读官方文档，并判断测试结果。

2026 年 10 月 25 日核查的公开规格说明对应构建版本 0.1.43。它接受公开 YouTube 视频的直接网址或视频 ID。ID 是用于标识视频的短代码。它不接受频道、播放列表或搜索页面作为来源列表。它读取已有字幕轨道，不会将语音转成新的文字，也不会下载音频或视频。

公开的[带时间戳字幕稿 Task](https://apify.com/chronometrica/youtube-transcript-scraper/examples/youtube-timestamped-transcript-json) 是一个可作为起点的预设。Task 是一组已保存的输入值。2026 年 10 月 25 日的核查找到了其公开页面和 Task ID。该次核查没有检查需要登录才能查看的已保存输入，也没有测试执行过程。

这份简短输入通过了所提供的结构规范检查。结构规范规定允许使用的输入字段和值。通过结构规范检查，不等于采集运行成功。

```json
{"includeFailedInputDetails":true,"outputFormats":["json"],"preferredLanguages":[],"startUrls":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}
```

3. 按需使用带时间信息的字幕

运行前，执行以下操作：

1. 将 `startUrls` 中的整个示例列表替换为你要核查的公开教程网址。
2. 保持 `outputFormats` 为 `["json"]`，以请求带时间信息的片段。
3. 选择字幕语言策略。
4. 保持 `includeFailedInputDetails` 为 true，让失败的输入仍显示在运行报告中。

示例网址仅用于展示符合结构规范的输入。它不能证明能获得有用的教程结果。本指南没有执行任何 Actor 运行。

空的 `preferredLanguages` 列表会请求最佳可用字幕轨道，但不保证返回英语字幕。如果设置了语言偏好，Actor 会按顺序尝试。如果这些语言都不可用，文档规定返回带明确类别的“语言不可用”失败结果，而不会不作说明就切换到其他语言。

文档规定的输入数量限制为 1–1,000 条。重复的视频 ID 只处理一次。这次核查只使用一个教程。

如果执行了计划中的运行，要先检查结果，再使用其中的文字。数据集中的一行代表一个已保存的视频结果。每个成功处理且不重复的视频会生成一行。失败的输入会显示在名为 OUTPUT 的运行报告中。

保留视频标识信息以及 `status`、`statusReason`、`transcriptLanguageCode`、`isAutoGenerated` 和 `scrapedAt`。最后一个字段记录采集时间。保留原始 `segments`，包括 `text`、`startSeconds`、`endSeconds` 和 `durationSeconds`。

使用返回的时间查找片段。仅凭纯文本无法确定字幕的结束时间。即使有结束时间，缺失的时长仍应保留为未知。不要用零替代缺失值。

语言标签、字幕来源标签和覆盖率数值都不能证明文字准确。无论如何，都要观看相关视频片段。

字幕是公开的来源数据。你保存的输入、私有运行记录、本地版本记录和测试结果是各自独立的记录。公开的预设页面不能证明账户所有者保存了什么或运行了什么。

## 4. 建立版本与步骤对照表

版本与步骤对照表将每条指令与其来源、官方参考文档及测试结果关联起来。每个必需步骤占一行。如果两个操作需要不同的核查，就将其拆为两行。

保存以下字段：

| 字段 | 保存内容 |
| --- | --- |
| 任务 | 你希望得到的具体小结果 |
| 视频来源 | 标题和公开网址 |
| 来源定位信息 | 视频时间，以及相关字幕片段（如有） |
| 原始指令 | 画面中显示的确切代码、选项或操作 |
| 教程版本 | 教程声明的版本及其出现位置；未提供则填“未知” |
| 本地环境 | 你实际使用的软件版本和相关配置 |
| 官方参考文档 | 页面网址、适用版本范围和相关段落 |
| 参考文档核查日期 | 阅读该页面的日期 |
| 拟议修改 | 你提出的替代指令，与原始指令分开保存 |
| 测试输入 | 测试时使用的确切无害输入（如已测试） |
| 预期结果 | 应该发生什么，以及原因 |
| 实际结果 | 实际观察到的确切输出或错误；未测试则填“未测试” |
| 测试日期 | 测试发生的日期；未测试则填“未测试” |
| 状态 | 已核查、有文档依据的变更、未测试或受阻 |
| 待解决问题 | 缺失的证据，以及下一项所需核查 |

像保存成功输出一样，认真保存错误。不要用预期结果替代错误。

缺少信息时填写“未知”。只有实际已知值为零时才使用零。“没有测试记录”不等于“零次失败”。它表示该行没有测试证据。

将原始指令和拟议指令保存在不同字段中。否则，后来的读者无法看出改了什么，也无法知道修改原因。

## 5. 阅读对应功能和版本的官方参考文档

打开该项具体功能的官方文档。功能是指软件的一项功能或行为。检查页面适用于哪个软件版本。

阅读行为说明，以及该功能何时引入、更改或移除的注释。保存相关段落和核查日期。

按以下顺序操作：

1. 将确切的功能名称与画面中的指令对应起来。
2. 确认参考文档适用的版本。
3. 阅读预期行为说明。
4. 核查版本说明。
5. 将文档的适用范围与你的本地版本进行比较。
6. 记录仍然缺失的信息。

当前文档页面可能说明某项功能何时加入，但这不能证明每个早期版本中的所有行为。如果页面不适用于你需要的版本，就将这部分保留为“未解决”，直到找到相关的官方参考文档。

不要因为找不到某项功能的文档，就推断该功能不可用。将未找到文档的情况记录为来源缺口。

[Python 官方字符串参考文档](https://docs.python.org/3/builtins/stdtypes.html#str.removeprefix)提供了一个清楚的例子。如果字符串开头与指定前缀完全匹配，`str.removeprefix` 就会移除该前缀。否则，它会返回未改变的字符串。参考文档说明，该方法在 Python 3.9 中加入。

所提供的同一份参考证据也说明了 `lstrip` 的区别：它从字符串开头移除属于指定字符集合的字符。它不能等价替代完全匹配的前缀移除操作。名称相似，或在某个输入上得到相似结果，都不能证明行为相同。

## 6. 选择结果明确的无害测试

可复现性测试用于检查：在明确的环境中，使用明确的输入，是否能得到明确的结果。

选择能够回答该功能问题的最小测试。优先选择只处理本地值、不会产生外部影响的操作。运行之前，先写下预期结果。

首次核查时，避免未经审查的安装、创建账户、使用凭据、操作生产系统，以及执行未经审查就复制的命令。凭据是用于获得访问权限的秘密信息。生产系统是用于实际业务的系统。

记录确切输入、预期输出、实际输出、本地版本和测试日期。如果测试失败，保留确切错误，并停止该步骤。不要在没有说明的情况下连续修改多处，然后只记录最后的成功结果。

无害的功能测试用途有限。它可以确认某个操作在你的环境中是否有效，但不能证明整个项目能够安装、教程中的每个步骤都有效，或其他软件版本的行为相同。

## 7. 实例演示：移除完全匹配的前缀

本例使用所提供的本地测试记录。它不是原创虚构示例，也不是对某个真实 YouTube 教程的测试。

记录中的环境为 Python 3.12.12，核查日期为 2026 年 10 月 25 日。测试只使用了本地标准库的字符串表达式。标准库是 Python 自带的一组工具。该测试不包含安装、网络访问或教程执行。

任务是从字符串中移除完全匹配的前缀。字符串是一种文本值。

第一个表达式：

```python
"Arthur: three!".removeprefix("Arthur: ")
```

7. 实例演示：移除完全匹配的前缀

预期结果为 `three!`。记录中的实际结果为 `three!`。

该前缀包含 8 个字符：6 个字母、1 个冒号和 1 个空格。原始文本包含 14 个字符。移除该前缀后，剩余 14 − 8 = 6 个字符，即 `three` 中的 5 个字母和 1 个感叹号。这里的单位是字符，不是字节。

第二个表达式：

```python
"Arthur: three!".lstrip("Arthur: ")
```

7. 实例演示：移除完全匹配的前缀

预期结果为 `ee!`。记录中的实际结果为 `ee!`。

这里，`lstrip` 将指定文本视为一个字符集合，并从字符串开头移除属于该集合的字符。移除 `Arthur: ` 后，它还会继续移除 `three!` 开头的 `t`、`h` 和 `r`。这些字符也在指定集合中。遇到 `e` 时，它停止移除。

因此，它除了移除前缀中的 8 个字符，还移除了另外 3 个字符。剩余字符数为 14 − 8 − 3 = 3。剩余文本为 `ee!`。

| 核查项 | 已记录的证据 | 局限 |
| --- | --- | --- |
| 本地版本 | Python 3.12.12 | 不能说明其他环境的情况 |
| 官方版本说明 | `str.removeprefix` 在 Python 3.9 中加入 | 不能确认所有后续版本中的全部行为 |
| 完全匹配的前缀测试 | 预期为 `three!`；实际为 `three!` | 仅核查了这个表达式和这项输入 |
| 开头字符移除测试 | 预期为 `ee!`；实际为 `ee!` | 说明这个表达式为何不能作为等价替代 |
| 教程版本和定位信息 | 未知；未测试任何教程 | 不能将任何教程步骤标为“已核查” |
| 完整流程 | 未测试 | 不能声称完整教程已成功运行 |

这些证据只支持一个范围有限的决定：当目标是移除完全匹配的前缀，且所用版本支持时，就使用该操作。不要将其替换为 `lstrip`，并认为两者含义相同。

对于你的教程，补充画面中实际显示的指令及其出现时间。然后在你记录的版本中，亲自进行无害测试。所提供的结果是关于 Python 3.12.12 的证据，不是你电脑上的测试结果。

## 8. 标明状态并决定哪些步骤可以继续

整张表统一使用以下四种状态：

| 状态 | 含义 | 下一步决定 |
| --- | --- | --- |
| 已核查 | 你已检查指令，并在所述环境中确认了所选测试的结果 | 在已测试的范围内继续 |
| 有文档依据的变更 | 官方参考文档证实存在相关版本差异 | 保留原始指令，提出修改，并记录是否已测试该修改 |
| 未测试 | 你尚未执行所需测试 | 先测试，再声称它在本地有效 |
| 受阻 | 缺少证据，或必需操作不安全，导致无法核查 | 先解决缺口，再执行该步骤 |

有文档依据的变更并不自动等于已通过测试的修复。将测试结果保存在单独的结果字段中。如果需要新指令，就为它单独建一行，让证据保持清楚。

没有字幕时，仍可手动查看视频。如果画面无法辨认，就将确切指令保留为“未解决”。如果你的版本未知，先确认版本，再声称兼容。如果官方参考文档的适用范围不符，就保留该来源缺口。

跟随完整教程操作前，检查每一行必需步骤。每一行都需要有证据支持你计划执行的操作。某个表达式通过测试，并不能证明未测试的安装或账户步骤可以执行。

不要将这张表变成对视频整体质量的评分。它的目的是支持一个实际决定：在你记录的环境中，哪些指令可以执行，哪些仍需进一步核查。

## 接下来核查一个必需步骤

从教程画面中选出一条操作指令。记录教程中的版本和你使用的版本，阅读相关官方参考文档，并设计一个无害的测试。继续之前，保存确切的结果及其适用范围。

如果查找指令比较费时，可以使用 [YouTube Transcript Scraper](https://apify.com/chronometrica/youtube-transcript-scraper) 获取你所选公开教程中已有的带时间信息的字幕。先替换示例网址。在检查采集结果之前，不要把计划中的采集当作已完成。然后回到视频，亲自完成版本核查。

## 来源和延伸阅读

- [Python 内置类型：前缀移除与开头字符移除——2026 年 10 月 25 日核查；官方行为说明和版本说明，并非教程测试](https://docs.python.org/3/builtins/stdtypes.html#str.removeprefix)
- [YouTube Transcript Scraper——2026 年 10 月 25 日核查；公开构建版本 0.1.43 的规格说明，未执行采集，也未测试运行健康状况](https://apify.com/chronometrica/youtube-transcript-scraper)
- [带时间戳字幕稿 Task——2026 年 10 月 25 日核查；仅确认公开页面和 Task ID 存在，未检查已保存的输入，也未检查执行情况](https://apify.com/chronometrica/youtube-transcript-scraper/examples/youtube-timestamped-transcript-json)
- [关于通过 YouTube 学习编程的公开问题——2024 年 11 月 25 日发布，2026 年 10 月 25 日查阅；仅为一位读者的问题，并非需求或效果证据](https://www.reddit.com/r/learnprogramming/comments/1gz6km5)