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

Python 3.9.7开发YouTube视频查看下载器时match语句语法无效问题求助

解决你的YouTube工具的Match Case语法错误与编辑器高亮问题

嘿,我来帮你搞定这两个问题!

1. 为什么会出现「Match case invalid syntax」报错?

你当前使用的是Python 3.9.7,但match-case语法是Python 3.10才正式引入的新特性(出自PEP 634),3.9版本完全不识别这个语法,所以运行时必然会抛出无效语法的错误。

另外,就算你升级到3.10版本,你的代码里还有个小语法失误:case: "b"这种写法是错误的,冒号应该放在匹配值的后面,正确格式是case "b":。

2. 为什么Atom里match关键字没有语法高亮?

这是因为你的Atom编辑器的Python语法高亮插件(通常是language-python)没有更新到支持Python 3.10+的版本,所以它还不把match当作关键字来处理。

具体解决方案

方案一:升级Python版本到3.10+

直接将Python升级到3.10或更高版本,就能原生支持match-case语法,从根源解决报错问题。

方案二:修正代码里的语法错误

不管是否升级Python,先把case的写法改对,同时补充完整的分支逻辑,修正后的代码如下:

# A youtube info and downloader
import getpass
from pytube import YouTube
from pathlib import Path

username = getpass.getuser()
downloads_path = str(Path.home() / "Downloads")

# Create video object
link = input("Enter video link (Don't forget https://): ")
video_object = YouTube(link)

# Print info
print(f"Title: {video_object.title}")
print(f"Length: {round(video_object.length / 60, 2)} minutes")
print(f"Views: {round(video_object.views / 1000000, 2)} million")
print(f"Author: {video_object.author}")

# Download
print("Download: (b)est | (w)orst | (a)udio | (e)xit")
download_choice = input(f"{username} $ ")
match download_choice:
    case "b":
        video_object.streams.get_highest_resolution().download(downloads_path)
    case "w":
        video_object.streams.get_worst_resolution().download(downloads_path)
    case "a":
        video_object.streams.get_audio_only().download(downloads_path)
    case "e":
        print("Exiting the program...")
    case _:
        print("Invalid input, please try again!")

我额外补充了case "e"退出分支和默认的case _分支,避免输入无效字符时程序无响应。

方案三:修复Atom的语法高亮问题

打开Atom的设置面板,找到language-python插件,点击更新到最新版本。如果更新后仍不生效,可以尝试安装支持Python 3.10+的第三方语法扩展,比如适配新版本Python的python-language-server相关插件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:18:09