Python中pytube分辨率参数失效问题求助
解决Pytube选择分辨率下载失败误报链接错误的问题
问题根源
- 异常捕获过于笼统:你代码中的
except块捕获了所有异常,不管是链接无效、视频不可用还是找不到指定分辨率的流,都统一输出"Please enter right link",导致错误提示完全误导。 - 未检查流是否存在:当
yt.streams.filter()找不到匹配videoRes的MP4流时,调用download()会抛出异常,但被你的通用except拦截,错误归因到链接上。
修复方案
修改代码,拆分异常处理逻辑,先验证目标流是否存在,再执行下载操作:
import pytube from pytube import YouTube from pytube.exceptions import VideoUnavailable, RegexMatchError videoURL = input("Enter Your Video Link : ") videoRes = input("Enter Your Quality (e.g., 144p, 360p): ") try: yt = YouTube(videoURL) print("Fetching video streams...") # 过滤MP4格式与指定分辨率的流 target_streams = yt.streams.filter(file_extension='mp4', resolution=videoRes) if not target_streams: print(f"错误:未找到分辨率为 {videoRes} 的MP4流") # 可选:列出当前视频支持的所有MP4分辨率 print("该视频可用的MP4分辨率:") available_resolutions = sorted(set(stream.resolution for stream in yt.streams.filter(file_extension='mp4') if stream.resolution)) for res in available_resolutions: print(f"- {res}") else: print("Downloading...") target_streams.first().download(output_path="C:\\Users\\pc\\Desktop") print("下载成功!") except VideoUnavailable: print("错误:视频不可用或为私有视频") except RegexMatchError: print("错误:请输入有效的YouTube视频链接") except Exception as e: print(f"意外错误:{str(e)}")
关键修改点
- 精准异常捕获:导入Pytube内置的
VideoUnavailable和RegexMatchError,分别处理视频不可用、链接无效的情况,其他异常单独提示具体信息。 - 流存在性检查:先确认过滤后的流列表非空,再执行下载,否则明确提示分辨率不存在,并可选列出可用分辨率供用户参考。
- 明确获取流:用
first()方法显式获取第一个匹配的流,避免隐式调用可能带来的问题。
内容的提问来源于stack exchange,提问作者Mido
相关产品推荐
相关产品推荐

