2013-02-26 19 views
7

誰かがこのコードを教えてくれますか?私はビデオを再生するpythonスクリプトを作成しようとしています。このファイルはダウンロードのYoutubeビデオです。私は何が起こっているかについて完全にはわかっていないし、私はこのエラーを理解できない。'NoneType'オブジェクトに 'group'属性がありません

エラー:

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 
+0

@omouse私のコードをすべて見たいですか?質問は答えました – David

+7

私は明らかに学ぶことを試みています、それほど重要である必要はありません – David

答えて

12

エラーがあなたのラインに11ある、あなたのre.searchは、何も結果を返さないすなわちNone、その後、あなたはfmtre.groupが、fmtreを呼び出すようにしようとしているされたので、AttributeErrorNoneです。

あなたは試みることができる:

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 
+0

これは動作します。何らかの理由でURLを認識できません。それを理解する時間... – David

1

group属性を持たないURLを一致させるためにregexを使用しますが、それは一致しないので、結果はNone

Noneタイプです

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 
関連する問題