web-dev-qa-db-ja.com

「NoneType」オブジェクトには属性「group」がありません

誰かがこのコードを手伝ってくれますか?動画を再生する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
14
David

エラーは11行目にあります。re.searchが結果を返さない、つまりNoneであり、fmtre.groupを呼び出そうとしていますが、fmtreNone、したがってAttributeErrorです。

あなたが試すことができます:

def getVideoUrl(content):
    fmtre = re.search('(?<=fmt_url_map=).*', content)
    if fmtre is None:
        return None
    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
19
Ian McMahon

regexを使用してURLを照合しますが、照合できないため、結果は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
3
Tanky Woo