NameError:名称“urlopen”未定义

Posted

技术标签:

【中文标题】NameError:名称“urlopen”未定义【英文标题】:NameError: name 'urlopen' is not defined 【发布时间】:2013-06-24 05:34:09 【问题描述】:

好的,这是我的最后一个问题,所以我终于找到了一个打印良好且有效的 api,但我的问题是,如果有人可以帮我查看这个并告诉我有什么问题,那就太好了

import urllib
import json

request = urlopen("http://api.exmaple.com/stuff?client_id=someid&client_secret=randomsecret")
response = request.read()
json = json.loads(response)
if json['success']:
     ob = json['response']['ob']
     print ("The current weather in Seattle is %s with a temperature of %d") % (ob['weather'].lower(), ob['tempF'])
else:
     print ("An error occurred: %s") % (json['error']['description'])
request.close()

这是错误

Traceback (most recent call last):
File "thing.py", line 4, in <module>
request = urlopen("http://api.exmaple.com/stuff?client_id=someid&client_secret=randomsecret")
NameError: name 'urlopen' is not defined

【问题讨论】:

【参考方案1】:

您没有导入名称urlopen

由于您使用的是python3,因此您需要urllib.request

from urllib.request import urlopen
req = urlopen(...)

或明确引用request 模块

import urllib.request
req = request.urlopen(...)

在 python2 中这将是

from urllib import urlopen

或使用urllib.urlopen


注意: 您还覆盖了名称 json,这不是一个好主意。

【讨论】:

现在收到此错误 Traceback(最近一次调用最后一次):文件“C:/Users/Grant/Desktop/finaly.py”,第 1 行,在 from urllib import urlopen ImportError: cannot导入名称urlopen 我更改了您所说的内容,但现在收到此错误 Traceback (最近一次调用最后一次): File "C:/Users/Grant/Desktop/finaly.py", line 4, in request = urllib.urlopen("api.aerisapi.com/observations/…) NameError: name 'urllib' is not defined 抱歉打扰了,但我对一周前学习在我的 pi 上编码是完全陌生的 不要使用 urllib.urlopen。使用 urlopen 或 request.urlopen。 好的,我把它改了,但现在在运行它时遇到 python 3 中的错误,我不得不将 response = request.read() 更改为 response = request.read().decode("utf- 8") 但现在得到此错误类型错误 unsupported operand tyoe(s) for %: 'nonetype and 'tuple' please help total noob here 如果我们要解决其他问题,因为 OP 使用的是 Python 3,print 是一个函数,所以 print("whatever") % stuff 将不起作用,因为 print 返回 None.. 【参考方案2】:

Python 不知道您引用的 urlopen(第 4 行)是来自 urlliburlopen。你有两个选择:

    告诉 Python 它是 - 将 urlopen 替换为 urllib.urlopen 告诉 Python 所有对urlopen 的引用都是来自urllib 的引用:将import urllib 行替换为from urllib import urlopen

【讨论】:

第一个 Traceback 出现此错误(最近一次调用最后一次):文件“C:/Users/Grant/Desktop/finally2.py”,第 4 行,在 request = urllib. urlopen("api.aerisapi.com/observations/…) AttributeError: 'module' object has no attribute 'urlopen' 并且第二个我得到 thisTraceback (最近一次调用最后): File "C:/Users/Grant/Desktop/finally2.py",第 1 行,在 from urllib import urlopen ImportError: cannot import name urlopen【参考方案3】:

应该是:

import urllib
import json

request  = urllib.urlopen("http://api.example.com/endpoint?client_id=id&client_secret=secret")
response = request.read()
json = json.loads(response)

if json['success']:
     ob = json['response']['ob']
     print ("The current weather in Seattle is %s with a temperature of %d") % (ob['weather'].lower(), ob['tempF'])

else:
     print ("An error occurred: %s") % (json['error']['description'])

request.close()

您没有专门从 urllib 库中导入 urlopen() 方法。

【讨论】:

我收到此错误回溯(最近一次调用最后一次):文件“C:/Users/Grant/Desktop/finally2.py”,第 1 行,在 from urllib import urlopen ImportError: cannot导入名称urlopen 这不是我的建议。尝试完全按照上面写的内容运行;我已经测试过了,它可以工作。 你正在运行 python 2 或 3 我正在运行 3 我在 2.7 .. 正如另一个答案所说,您应该将 import urllib.request 用于 python 3。这应该可以为您工作。

以上是关于NameError:名称“urlopen”未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“NameError:名称方法名称未定义”? [复制]

NameError:名称“”未定义[关闭]

奇怪的 NameError:未定义全局名称“StrList”

python:NameError:全局名称'...'未定义[重复]

NameError:名称'unicode'未定义[重复]

NameError:名称'python'未定义[关闭]