Python代码调用download方法触发AttributeError的问题咨询
问题解决:AttributeError: 'function' object has no attribute 'download'
错误原因
- 方法未调用:
get_audio_only和first是PyTube的方法,需要加括号()执行才能返回可下载的Stream对象,你现在直接赋值给videoStream的是方法本身(函数对象),自然没有download属性。 - 布尔值判断错误:
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
相关产品推荐
相关产品推荐

