Pytube的progress_Check回调参数配置及整数减None报错解决方案咨询
报错根源
- 回调函数的参数签名和pytube官方要求的规则不匹配,多定义了无效参数
file_handle导致参数位置错位,remaining变量无法正确接收到pytube传递的剩余字节数值,仅能拿到你设置的默认值None - 全局变量
file_size没有提前正确赋值,也可能出现为None的情况,最终触发整数和None做减法的报错
解决方法
修正回调函数的参数定义,直接从pytube传入的stream对象获取文件总大小,无需用全局变量存储,从根源避免变量未初始化的问题。
修正后的完整代码如下:
- 进度回调函数
def progress_Check(stream, chunk, bytes_remaining): # 直接从stream对象获取文件总字节数,无需依赖全局变量 total_size = stream.filesize bytes_downloaded = total_size - bytes_remaining # 增加总大小判断避免除零报错 if total_size > 0: percent = (bytes_downloaded / total_size) * 100 print("{:00.0f}% downloaded".format(percent))
- 调用逻辑无需修改
yt = YouTube(link,on_progress_callback=progress_Check)
补充说明
- 如果运行仍有异常,可先升级pytube到最新版本:
pip install --upgrade pytube - 不要给回调参数设置不必要的默认值,避免参数错位时无法第一时间发现问题
内容的提问来源于stack exchange,提问作者SimpleGuy_
相关产品推荐
相关产品推荐

