web-dev-qa-db-fra.com

L'objet 'NoneType' n'a pas d'attribut 'group'

Quelqu'un peut-il m'aider avec ce code? J'essaye de faire un script python qui jouera les vidéos et j'ai trouvé ce fichier qui télécharge les vidéos Youtube. Je ne suis pas tout à fait sûr de ce qui se passe et je ne peux pas comprendre cette erreur .

Erreur:

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

Extrait de code:

(lignes 66-71)

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

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

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

L'erreur est dans votre ligne 11, votre re.search ne renvoie aucun résultat, c'est-à-dire None, puis vous essayez d'appeler fmtre.group mais fmtre est None, d'où le AttributeError.

Tu pourrais essayer:

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

Vous utilisez regex pour faire correspondre l'URL, mais elle ne peut pas correspondre, donc le résultat est None

et le type None n'a pas l'attribut group

Vous devez ajouter du code à detect le résultat

S'il ne peut pas correspondre à la règle, il ne doit pas continuer sous le code

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