Почему в моей программе для скачивания видео с YouTube на Python вылетает ошибка?
import pytube
import time
import sys
import threading
SAVE_PATH = "download_vidio"
link = "https://www.youtube.com/watch?v=6JLXHxSXYkA"
def planet_vpn():
import planet_vpn
client = planet_vpn.Client()
ip_data=client.my_ip()
#planet_vpn()
def progres_bar():
toolbar_width = 55
sys.stdout.write("[%s]" % (" " * toolbar_width))
sys.stdout.flush()
sys.stdout.write("\b" * (toolbar_width+1)) # return to start of line, after '['
for i in range(toolbar_width):
time.sleep(0.1) # do real work here
# update the bar
sys.stdout.write("-")
sys.stdout.flush()
sys.stdout.write("]\n") # this ends the progress bar``
# пробуем скачать видео по ссылке
def download(link):
try:
youtubelink=pytube.YouTube(link)
# получаем ссылку на видео с самым высоким качеством
video=youtubelink.streams.get_highest_resolution()
# скачиваем видео
video.download(SAVE_PATH)
print('скачено')
# если скачать не получилось
except:
# выводим сообщение об ошибке
print("Ссылка не работает")
if __name__ =="__main__":
t1 = threading.Thread(target=progres_bar)
t2 = threading.Thread(target=download, args=(link))
t1.start()
t2.start()
t1.join()
t2.join()
print("Done!")
выдает ошибку:
[]Exception in thread Thread-2
(download):
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1073,
in _bootstrap_inner
self.run()
File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1010,
in run
self._target(*self._args, **self._kwargs)
TypeError: download() takes 1 positional argument but 43 were given
-------------------------------------------------------]
Done!
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
args=(link)
- в такой записи скобки никакой роли не играют, это тоже самое, что args=link
, а поскольку ожидается коллекция args is a list or tuple of arguments for the target invocation
, то link
превращается в кортеж из отдельных букв, который и передаётся в download
в качестве отдельных параметров, одна буква - один параметр, вот и получается 43 аргумента функции вместо одного.
Поставьте запятую и будет вам правильная передача параметров в виде кортежа из одного элемента: args=(link,)