2013-02-26 15 views
7

Ai đó có thể giúp tôi với mã này không? Tôi đang cố gắng tạo một tập lệnh python để phát video và tôi tìm thấy tệp này tải xuống các video trên Youtube. Tôi không hoàn toàn chắc chắn những gì đang xảy ra và tôi không thể tìm ra lỗi này.Đối tượng 'NoneType' không có thuộc tính 'nhóm'

Lỗi:

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

Đoạn mã:

(dòng 66-71)

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

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

(dòng 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 Bạn có muốn xem tất cả mã của tôi không? Câu hỏi đã được trả lời – David

+7

Tôi rõ ràng đang cố gắng tìm hiểu, không cần phải quá quan trọng – David

Trả lời

12

Lỗi này là phù hợp của bạn 11, bạn re.search đang trở lại không có kết quả, tức là None, và sau đó bạn đang cố gắng gọi fmtre.group nhưng fmtreNone, vì thế mà AttributeError.

Bạn có thể thử:

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

Tác phẩm này. Vì một số lý do, bây giờ nó không nhận ra URL. Đã đến lúc tìm ra ... – David

1

Bạn sử dụng regex để phù hợp với url, nhưng nó không thể phù hợp, vì vậy kết quả là None

None loại không có thuộc tính group

Bạn nên thêm một số mã vào detect kết quả

Nếu không khớp quy tắc, nó không được đi theo mã

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