首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyTube: PrivateVideo异常不起作用

PyTube: PrivateVideo异常不起作用
EN

Stack Overflow用户
提问于 2021-01-01 05:37:00
回答 1查看 498关注 0票数 0

我写了一个代码,它将打印播放列表上所有视频的名称。问题是当它试图打印私人视频的名称时。我写了一个来自Github的异常,这是所有者写的,但它仍然不能工作。它应该跳过这个视频,转到另一个视频,但它没有这样做,程序崩溃。下面是我的代码:

代码语言:javascript
复制
import pytube
from pytube.exceptions import VideoPrivate

pl = pytube.Playlist("https://www.youtube.com/playlist?list=PLB1PGaMZkETOixDfsnKIOkfJS_cToCHSt")


for video in pl.videos:
    try:
        print(video.title)
    except VideoPrivate:
        continue

错误输出:

代码语言:javascript
复制
python playlist.py
One Direction - Steal My Girl
One Direction - Drag Me Down (Official Video)
One Direction - Story of My Life
One Direction - Night Changes
One Direction - Perfect (Official Video)
Traceback (most recent call last):
  File "playlist.py", line 6, in <module>
    for video in pl.videos:
  File "C:\Users\Elton\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pytube\contrib\playlist.py", line 222, in videos
    yield from (YouTube(url) for url in self.video_urls)
  File "C:\Users\Elton\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pytube\contrib\playlist.py", line 222, in <genexpr>
    yield from (YouTube(url) for url in self.video_urls)
  File "C:\Users\Elton\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pytube\__main__.py", line 104, in __init__
    self.prefetch()
  File "C:\Users\Elton\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pytube\__main__.py", line 203, in prefetch
    self.check_availability()
  File "C:\Users\Elton\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pytube\__main__.py", line 137, in check_availability
    raise VideoPrivate(video_id=self.video_id)
pytube.exceptions.VideoPrivate: 8fGmghrkLco is a private video
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-01 06:05:34

异常是在try/catch之外生成的。它实际上是在pl.videos的下一项是next时引发的。

代码语言:javascript
复制
@property
def videos(self) -> Iterable[YouTube]:
    """Yields YouTube objects of videos in this playlist

    :Yields: YouTube
    """
    yield from (YouTube(url) for url in self.video_urls)

您可以使用video_urls,而不是调用视频

代码语言:javascript
复制
for video in pl.video_urls:
    try:
        print(YouTube(video).title)
    except VideoUnavailable:
        continue

这里我们使用的是VideoUnavailable,它是VideoPrivate的baseClass

您将需要以下导入:

代码语言:javascript
复制
import pytube
from pytube.exceptions import VideoUnavailable
from pytube import YouTube

输出:

代码语言:javascript
复制
One Direction - Steal My Girl
One Direction - Drag Me Down (Official Video)
One Direction - Story of My Life
One Direction - Night Changes
One Direction - Perfect (Official Video)
One Direction - You & I
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65525736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档