私は、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'
Python 2または3?グローバルを使用するのではなく、最後に 'get video'を返すように変更し、' downloadVideo'を変更してパラメータ: 'downloadVideo(video)'を取得します。そうすれば、ローカルとグローバルについて心配する必要はなく、他の問題も見つけることができます。私は 'get'を呼び出すコードを推測しており、' downloadbideo'は 'video'を変更して' getbest(...) 'がエラーを返さないようにします。 – cxw
@cxw Python 3. Btw、 'get()'と 'downloadVideo()'を呼び出すコードは 'video'を変更しません。 – DimChtz
OK、ありがとう。私は最初のコメントを待っています:グローバルを使用しないでください。それ以外は、明らかな問題は見られません。グローバルを無効にしても問題が残っている場合は、新しいコードで質問を更新してください。 – cxw