pytube

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
AndiS
User
Beiträge: 24
Registriert: Dienstag 21. September 2021, 20:44

Hallo,

leider erscheint der Fehler: except VideoUnavailable:
NameError: name 'VideoUnavailable' is not defined

Code: Alles auswählen

url = sys.argv[1]
dl = sys.argv[2]

yt = YouTube(url)
try:
    print(f'Titel: {yt.title}')
    yt.streams.get_highest_resolution().download(dl)
except VideoUnavailable:
    print(f'Video {url} wurde nicht gefunden!')
else:
    print('\nFertig.')
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Dann fehlt der Import:

Code: Alles auswählen

from pytube.exceptions import VideoUnavailable
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Naja, wenn du einen Namen aus einem Modul verwenden willst, musst du ihn halt auch importieren. Vermutlch so:

Code: Alles auswählen

from pytube.exceptions import VideoUnavailable
In specifications, Murphy's Law supersedes Ohm's.
AndiS
User
Beiträge: 24
Registriert: Dienstag 21. September 2021, 20:44

Hallo,

danke für die tatkräftige Unterstützung. Leider kommt immer noch folgender Fehlercode:
raise exceptions.VideoUnavailable(video_id=self.video_id)
pytube.exceptions.VideoUnavailable: LovsHHk3t22 is unavailable

Hier mal der ganze Quellcode:

Code: Alles auswählen

import sys
from pytube import YouTube
from pytube.exceptions import VideoUnavailable

if len(sys.argv) < 3:
    print('\nFormat: youtube.exe <Link zum Youtube-Video> <Zielordner>\n')
    sys.exit(0)

url = sys.argv[1]
dl = sys.argv[2]

yt = YouTube(url)
print(f'Titel: {yt.title}')
try:
    yt.streams.get_highest_resolution().download(dl)
except VideoUnavailable:
    print(f'Video {url} wurde nicht gefunden!')
else:
    print('\nFertig.')
Vielen Dank, Andi.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte die GANZE Fehlermeldung posten. Denn sonst muss man raten.

Wenn ich das tue, dann denke ich mal, dass auch das

yt = YouTube(url)

in deinen try-Block gehoert.
AndiS
User
Beiträge: 24
Registriert: Dienstag 21. September 2021, 20:44

Hallo,

oh man .. schäm - daran lags!!! 1000 x DANKE für die Hilfe!!!!

Noch eine Frage: Wenn ich es richtig sehe, dann gibt laut Doku insgesamt 12 (z.B. VideoPrivate, VideoRegionBlocked usw.) Fehlermöglichkeiten (https://readthedocs.org/projects/python ... df/stable/). Muss man die alle einzeln abfangen? Oder kann man einen für alle abfangen??

DANKE, DANKE für die Hilfe nochmal!!! Andi.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da steht drin

exception pytube.exceptions.PytubeError
Base pytube exception that all others inherit.

Das ist also die eine, sie alle zu fangen.
AndiS
User
Beiträge: 24
Registriert: Dienstag 21. September 2021, 20:44

Ok. Danke für die schnelle Reaktion ;-)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Da stimmt was nicht.
die Zeile

Code: Alles auswählen

yt = YouTube(url)
kann in den try-except block, muss aber nicht. Bei der Instanzierung werden erstmal leere Attribute angelegt und eine Prüfung durchgeführt, ob es überhaupt vom Aufbau eine YouTube-url ist.
Es wird noch keine Verbindung zum Server aufgebaut, da
Wenn es da eine Exception gäbe wäre es ein RegexMatchError.
Mit der URL: https://www.youtube.com/watch?v=LovsHHk3t22
Gibt es da keinen Fehler. Jedenfalls nicht bei mir. Und auch nicht den Fehler wie er von dir beschrieben wurde.

Erst wenn man "titel" oder "stream" abfragen will, wird eine Verbindung mit dem Server aufgebaut und versucht den Link aufzulösen.

Dabei gibt es mit *der* url auch den von dir beschriebenen Fehler, weil es das Video halt nicht gibt.

Mit der url zum Beispiel funktioniert alles:
https://www.youtube.com/watch?v=G1qEh7Q3vwQ

Ich verstehe nicht warum du hier immer wieder Versuche mit Links postest die sowieso nicht funktionieren. Das macht die Kommunikation unnötig kompliziert.
AndiS
User
Beiträge: 24
Registriert: Dienstag 21. September 2021, 20:44

Hallo,

Sorry vielleicht für die Verwirrung, aber ich habe bewusst eine falsche / also nicht existierende URL angeben. Ich wollte ja testen, ob diese korrekt abgefangen wird :-)

Code: Alles auswählen

yt = YouTube(url)
Funktioniert in und außen von TRY.

Entschuldigung, falls ich was falsch gemacht habe ;-)

Grüße, Andi.
Antworten