You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码调用download方法触发AttributeError的问题咨询

问题解决:AttributeError: 'function' object has no attribute 'download'

错误原因

  1. 方法未调用:get_audio_only和first是PyTube的方法,需要加括号()执行才能返回可下载的Stream对象,你现在直接赋值给videoStream的是方法本身(函数对象),自然没有download属性。
  2. 布尔值判断错误:messagebox.askyesno返回的是布尔值True或False,不是字符串'yes',原代码的判断条件永远不会成立。

修正后的完整代码

import tkinter as tk
from tkinter import Button, Entry, Label, StringVar, messagebox, filedialog
from pytube import YouTube

def download_url():
    Youtube_link = video_link.get()
    download_Folder = download_folder1.get()
    # 检查是否选择了下载文件夹
    if download_Folder == 'Select Folder':
        messagebox.showwarning('提示', '请先选择下载文件夹')
        return
    try:
        getVideo = YouTube(Youtube_link)
        AorV = messagebox.askyesno('Video Type','Do you want Audio only?')
        if AorV:  # 直接判断布尔值
            videoStream = getVideo.streams.get_audio_only()  # 加括号调用方法
            videoStream.download(download_Folder)
        else:
            # 注意:first方法已被弃用,改用get_highest_resolution()更可靠
            videoStream = getVideo.streams.get_highest_resolution()
            videoStream.download(download_Folder)
        messagebox.showinfo('Success','Downloaded to \n'+download_Folder)
    except Exception as e:
        messagebox.showerror('错误', f'下载失败:{str(e)}')

def browse_folder():
    folder_name = filedialog.askdirectory(initialdir='D:\\aweso\\Downloads')
    if folder_name:  # 确认用户选择了文件夹
        download_folder1.set(folder_name)

#GUI
root = tk.Tk()
root.geometry('300x200')
root.resizable(False,False)
root.title('Youtube Downloader')

url_label = Label(root, text='Youtube URL')
url_label.pack()

video_link = StringVar()
url_link = Entry(root, textvariable= video_link)
url_link.pack()

download_folder1 = StringVar()
download_folder1.set('Select Folder')

downloadvid = Button(root, text='Download',command=download_url)
downloadvid.pack()

selected_folder = Label(root,textvariable=download_folder1)
selected_folder.pack()

browse = Button(root,text='Browse',command=browse_folder)
browse.pack()

root.mainloop()

额外优化点

  • 增加了文件夹选择校验,避免用户未选文件夹就点击下载
  • 替换了已弃用的first()方法,改用get_highest_resolution()获取最高清晰度视频
  • 添加了异常捕获,能提示具体的下载失败原因(比如链接无效、网络问题等)

内容的提问来源于stack exchange,提问作者Spray Mane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:06:09