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
相关产品推荐
相关产品推荐

