属性错误:“模块”对象没有属性“urlretrieve”

问题描述 投票:0回答:4

我正在尝试编写一个程序,从网站下载 mp3,然后将它们连接在一起,但每当我尝试下载文件时,我都会收到此错误:

Traceback (most recent call last):
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 214, in <module> main()
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 209, in main getMp3s()
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 134, in getMp3s
raw_mp3.add = urllib.urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3")
AttributeError: 'module' object has no attribute 'urlretrieve'

导致此问题的线路是

raw_mp3.add = urllib.urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3")
python-3.x urllib attributeerror
4个回答
257
投票

当您使用 Python 3 时,不再有

urllib
模块。它已分为几个模块。

这相当于

urlretrieve

import urllib.request
data = urllib.request.urlretrieve("http://...")

urlretrieve
的行为方式与 Python 2.x 中完全相同,因此它可以正常工作。

基本上:

  • urlretrieve
    将文件保存到临时文件并返回一个元组
    (filename, headers)
  • urlopen
    返回一个
    Request
    对象,其
    read
    方法返回包含文件内容的字节串

11
投票

Python 2+3 兼容的解决方案是:

import sys

if sys.version_info[0] >= 3:
    from urllib.request import urlretrieve
else:
    # Not Python 3 - today, it is most likely to be Python 2
    # But note that this might need an update when Python 4
    # might be around one day
    from urllib import urlretrieve

# Get file from URL like this:
urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3")

5
投票

假设您有以下几行代码

MyUrl = "www.google.com" #Your url goes here
urllib.urlretrieve(MyUrl)

如果您收到以下错误消息

AttributeError: module 'urllib' has no attribute 'urlretrieve'

那么您应该尝试以下代码来解决问题:

import urllib.request
MyUrl = "www.google.com" #Your url goes here
urllib.request.urlretrieve(MyUrl)

0
投票

运行2to3实用程序将解决问题:

2to3 -w -n file.py

仅供参考,该命令会将结果写入磁盘而不备份文件。

© www.soinside.com 2019 - 2024. All rights reserved.