我正在尝试开发一个python脚本来下载一堆youtube视频,这些视频是使用youtube-dl模块从csv文件输入的。当下载单个视频失败时,脚本停止。我需要脚本继续下载下一个视频忽略无法下载的视频。有人能帮我讲讲如何在python中处理这个问题吗?
发布于 2016-02-04 21:59:32
如果您正在使用youtube-dl命令,则可以使用--ignore-errors flag。
如果使用的是python中的youtube_dl模块,则必须使用ignoreerrors parameter
from __future__ import unicode_literals
import youtube_dl
ydl_opts = {'ignoreerrors': True}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['<URL>'])发布于 2016-12-13 02:03:53
我意识到这是一个古老的问题,但这个问题突然出现在我面前,我找到了一个简单的解决方案。
我认为这里的问题是youtube_dl正在捕获任何出现的错误,然后通过它自己的内部消息输出例程来报告它们,所以在它到达调用代码之前,异常就被“消费”了。这可能适用于命令行实用程序,但在本机python代码中使用它时会产生障碍。幸运的是,youtube_dl的开发人员为我们提供了一种截获错误消息并对其进行处理的方法,而无需使用youtube_dl内部机制。不幸的是,它们在解释和示例方面都很少,但是如果你查看自述文件的“开发人员说明”,就会发现有一个自定义记录器类的示例。
只需稍作修改,我们就可以使用这个类来存储错误消息(或警告,等等),然后检查它们,而不是使用try/except块:
class MyLogger(object):
def __init__(self):
self._message_queue = []
def debug(self, msg):
print('[DEBUG]' + msg)
def warning(self, msg):
pass
def error(self, msg):
self._message_queue.append(msg)
print(msg)
def get_message(self):
return None if not len(self._message_queue) else \
self._message_queue.pop()导入记录器类,实例化它,并将其作为参数传递到youtube_dl的选项字符串中。
import mylogger
...
loggr = mylogger.MyLogger()
...
ydl_opts = { 'logger': loggr }现在,当需要根据出现的错误采取操作时,您可以检查记录器对象中的消息队列,看看是否有什么事情要做:
possible_error = loggr.get_message()
if possible_error is None:
#do normal code
else:
#check the content of the error string and do something with it.希望这对某些人有帮助。
https://stackoverflow.com/questions/35198155
复制相似问题