'NoneType'对象没有属性'group'

时间:2013-02-26 02:00:23

标签: python youtube download

有人可以帮我这个代码吗?我正在尝试制作一个可以播放视频的python脚本,我发现这个文件可以下载Youtube视频。我不完全确定发生了什么,我无法弄清楚这个错误。

错误:

AttributeError: 'NoneType' object has no attribute 'group'

回溯:

Traceback (most recent call last):
  File "youtube.py", line 67, in <module>
    videoUrl = getVideoUrl(content)
  File "youtube.py", line 11, in getVideoUrl
    grps = fmtre.group(0).split('&amp;')

代码段:

(第66-71行)

content = resp.read()
videoUrl = getVideoUrl(content)

if videoUrl is not None:
    print('Video URL cannot be found')
    exit(1)

(第9-17行)

def getVideoUrl(content):
    fmtre = re.search('(?<=fmt_url_map=).*', content)
    grps = fmtre.group(0).split('&amp;')
    vurls = urllib2.unquote(grps[0])
    videoUrl = None
    for vurl in vurls.split('|'):
        if vurl.find('itag=5') > 0:
            return vurl
    return None

4 个答案:

答案 0 :(得分:16)

错误在第11行,您的re.search未返回任何结果,即None,然后您尝试拨打fmtre.group,但fmtre为{ {1}},因此None

你可以尝试:

AttributeError

答案 1 :(得分:3)

您使用regex来匹配网址,但它无法匹配,因此结果为None

None类型没有group属性

您应该向detect结果添加一些代码

如果它不符合规则,则不应在代码

下继续
def getVideoUrl(content):
    fmtre = re.search('(?<=fmt_url_map=).*', content)
    if fmtre is None:
        return None         # if fmtre is None, it prove there is no match url, and return None to tell the calling function 
    grps = fmtre.group(0).split('&amp;')
    vurls = urllib2.unquote(grps[0])
    videoUrl = None
    for vurl in vurls.split('|'):
        if vurl.find('itag=5') > 0:
            return vurl
    return None

答案 2 :(得分:0)

在这种情况下,只想提及新的walrus operator,因为该问题经常被标记为重复问题,操作员可以很容易地解决这个问题。


Python 3.8之前,我们需要:

match = re.search(pattern, string, flags)
if match:
    # do sth. useful here

Python 3.8开始,我们可以这样写:

if (match := re.search(pattern, string, flags)) is not None:
    # do sth. with match

其他语言以前也有(例如CPHP),但imo它使代码更简洁。


对于上面的代码,这可能是

def getVideoUrl(content):
    if (fmtre := re.search('(?<=fmt_url_map=).*', content)) is None:
        return None
    ...

答案 3 :(得分:0)

只想添加到答案中,一组 数据应按顺序排列,因此您可以 匹配分组数据的每个部分而无需 跳过数据,因为如果从 句子,我们可能不再将句子称为一个组,有关更多说明,请参见下面的示例,但是不建议使用编译方法。

msg = "Malcolm reads lots of books"

#The below code will return an error.

book = re.compile('lots books')
book = re.search(book, msg)
print (book.group(0))

#The below codes works as expected

book = re.compile ('of books')
book = re.search(book, msg)
print (book.group(0))

#Understanding this concept will help in your further 
#researchers. Cheers.