2016-07-20 5 views
1

私は、pafyを使ってYouTube動画をダウンロードする簡単なスクリプトを作ろうとしていました。現在、グローバル変数videoに問題があります。これは、pafy.new('url')が返すものを格納するために使用します。ここで私が使用する2つの機能があります:Pythonの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); 

この:

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

+0

Python 2または3?グローバルを使用するのではなく、最後に 'get video'を返すように変更し、' downloadVideo'を変更してパラメータ: 'downloadVideo(video)'を取得します。そうすれば、ローカルとグローバルについて心配する必要はなく、他の問題も見つけることができます。私は 'get'を呼び出すコードを推測しており、' downloadbideo'は 'video'を変更して' getbest(...) 'がエラーを返さないようにします。 – cxw

+0

@cxw Python 3. Btw、 'get()'と 'downloadVideo()'を呼び出すコードは 'video'を変更しません。 – DimChtz

+0

OK、ありがとう。私は最初のコメントを待っています:グローバルを使用しないでください。それ以外は、明らかな問題は見られません。グローバルを無効にしても問題が残っている場合は、新しいコードで質問を更新してください。 – cxw

答えて

0

この行の問題を発見

video.getbest(preftype="mp4") 

は実際にNoneTypeオブジェクトを返さストリームにはmp4ストリームが含まれていなかったためですだから、ちょうど問題ではない、ちょうど私がdownload()を呼び出す前に確認する必要があります。今私はすべてのストリームvideo.streamsを取得し、私が必要なものをダウンロードするか、または利用可能なベストをダウンロードさせてくださいvideo.getbest().download()

関連する問題