【问题标题】:PyTube: PrivateVideo exception not workingPyTube:PrivateVideo 异常不起作用
【发布时间】:2021-04-08 01:34:21
【问题描述】:

我编写了一个代码,可以打印播放列表中所有视频的名称。问题是当它尝试打印私有视频的名称时。我从 Github 写了一个异常,所有者写的,但它仍然不起作用。它应该跳过这个视频并转到另一个视频,但它没有并且程序崩溃。这是我的代码:

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

错误输出:

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

【问题讨论】:

标签: python python-3.x exception except pytube


【解决方案1】:

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

@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代替调用视频

for video in pl.video_urls:
    try:
        print(YouTube(video).title)
    except VideoUnavailable:
        continue

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

您将需要以下导入:

import pytube
from pytube.exceptions import VideoUnavailable
from pytube import YouTube

输出:

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

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 2017-04-05
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2013-10-04
    相关资源
    最近更新 更多