2016-07-20 1 views
1

좋아, 난 pafy을 사용하여 YouTube 동영상을 다운로드하는 간단한 스크립트를 만들려고했다. 현재 video 전역 변수에 문제가있어 pafy.new('url')이 반환하는 값을 저장하는 데 사용합니다. 여기에 두 가지 기능은 내가 사용하는 것 :파이썬 pafy 글로벌 함수 호출 경계를 통해 작동하지 않습니다

video = {}; 

def downloadVideo(): 

    options = {}; 
    options['initialdir'] = 'C:\\'; 
    options['mustexist'] = False; 
    options['title'] = 'Download folder'; 

    dir_path = tkinter.filedialog.askdirectory(**options); 
    global video; 
    video.getbest(preftype="mp4").download(quiet=True, filepath=dir_path); 

def get(): 
    url = url_entry.get(); 

    if url == '': 
     return 

    global video; 
    video = pafy.new(url); 

    # Some code to display video info 

먼저 나는 Tkinter를 항목 위젯입니다 url_entry에서 비디오를 얻을 수 get() 기능을 사용하십시오. 지금까지 너무 좋아,하지만 난 downloadVideo()를 호출 할 때이 오류가 얻을 :

video.getbest(preftype="mp4").download(quiet=True, filepath=dir_path); 

이 :

video.getbest(preftype="mp4") 

실제로 NoneType 객체를 반환

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

+0

파이썬 2 또는 3? 전역 변수를 사용하는 대신 마지막에'get video'를'return video '로 변경하고'downloadVideo'를 매개 변수로 사용하도록 변경하십시오 :'downloadVideo (video)'. 그렇게하면 지역 대 글로벌에 대해 걱정할 필요가 없으며 다른 문제를 발견 할 수 있습니다. 나는'get'을 호출하는 코드를 추측하고 있으며'downloadbideo'는'video'를 수정하여 getbest (...)가 None을 반환하도록합니다. – cxw

+0

@cxw Python 3. Btw,'get()'과'downloadVideo()'를 호출하는 코드는'video'를 수정하지 않습니다. – DimChtz

+0

좋습니다, 감사합니다. 나는 나의 첫 번째 논평을지지한다 : 전역을 사용하지 말라. 그 외에는 명백한 문제가 보이지 않습니다. 전역 변수를 끄고 여전히 문제가있는 경우 새 코드로 질문을 업데이트하고 큰 소리로 말하십시오. – cxw

답변

0

이 줄에서 문제 발견을 스트림에 mp4 스트림이 포함되어 있지 않기 때문입니다. 따라서 정확히 문제가 아니며 download()에 전화하기 전에 확인해야 할 사항입니다. 이제 막 모든 스트림 video.streams을 다운로드하고 내가 필요로하는 것을 다운로드하거나 사용 가능한 최상의 다운로드를 허용하십시오 video.getbest().download().