Okay, ich habe versucht, ein einfaches Skript zum Herunterladen von Youtube-Videos mit pafy
zu erstellen. Derzeit habe ich ein Problem mit der globalen Variablen video
, die ich verwende, um zu speichern, was pafy.new('url')
zurückgibt. Ist hier die beiden Funktionen, die ich verwenden:Python pafy global funktioniert nicht über eine Funktionsaufrufgrenze hinweg
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
Zuerst verwende ich get()
Funktion das Video von url_entry
zu erhalten, die ein tkinter Eintrag Widget ist. So weit so gut, aber wenn ich downloadVideo()
nennen bekomme ich diesen Fehler:
AttributeError: 'NoneType' object has no attribute 'download'
Python 2 oder 3? Anstatt globals zu verwenden, ändern Sie 'get' in' return video' am Ende und ändern 'downloadVideo', um einen Parameter zu nehmen:' downloadVideo (video) '. Auf diese Weise müssen Sie sich nicht um lokale vs. globale Sorgen machen, und Sie können andere Probleme finden. Ich vermute, dass der Code, der 'get' und' downloadVideo' aufruft, 'video' so verändert, dass' getbest (...) 'None zurückgibt, woher der Fehler kommt. – cxw
@cxw Python 3. Btw, der Code, der 'get() 'und' downloadVideo() 'aufruft, ändert' video' nicht. – DimChtz
OK, danke. Ich stehe zu meinem ersten Kommentar: benutze keine Globals. Ansonsten sehe ich keine offensichtlichen Probleme. Wenn Sie die Globals ausschalten und immer noch Probleme haben, aktualisieren Sie die Frage mit dem neuen Code und rufen Sie mich an. – cxw