有人可以帮我这个代码吗?我正在尝试制作一个可以播放视频的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('&')
代码段:
(第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('&')
vurls = urllib2.unquote(grps[0])
videoUrl = None
for vurl in vurls.split('|'):
if vurl.find('itag=5') > 0:
return vurl
return None
答案 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('&')
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
其他语言以前也有(例如C
或PHP
),但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.