2013-02-26 12 views
7

Kann mir jemand mit diesem Code helfen? Ich versuche, ein Python-Skript zu erstellen, das Videos abspielen wird, und ich habe diese Datei gefunden, die Youtube-Videos des Downloads enthält. Ich bin mir nicht ganz sicher, was passiert und ich kann diesen Fehler nicht verstehen.'NoneType' Objekt hat kein Attribut 'Gruppe'

Fehler:

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

Traceback:

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;') 

Code-Snippet:

(Linien 66-71)

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

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

(Zeilen 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

@mouse Willst du meinen ganzen Code sehen? Die Frage wurde beantwortet – David

+7

Ich versuche offensichtlich zu lernen, keine Notwendigkeit, so kritisch zu sein – David

Antwort

12

Der Fehler ist in der Linie 11, Ihre re.search keine Ergebnisse zurückgibt, dh None, und dann Sie versuchen, rufen fmtre.group aber fmtre ist None, daher der AttributeError.

Sie könnten versuchen:

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

Das funktioniert. Aus irgendeinem Grund erkennt es die URL jetzt nicht. Zeit, das herauszufinden ... – David

1

Sie verwenden regex die URL anzupassen, aber es kann nicht überein, so ist das Ergebnis None

und None Typ nicht die group Attribut

Sie sollten

einige Code detect das Ergebnis hinzufügen Wenn es nicht mithalten können die Regel, sollte es unter Code

nicht gehen
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 
Verwandte Themen