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 行,在print
是一个函数,所以 print("whatever") % stuff
将不起作用,因为 print
返回 None
.. 【参考方案2】:
Python 不知道您引用的 urlopen
(第 4 行)是来自 urllib
的 urlopen
。你有两个选择:
-
告诉 Python 它是 - 将
urlopen
替换为 urllib.urlopen
告诉 Python 所有对urlopen
的引用都是来自urllib
的引用:将import urllib
行替换为from urllib import urlopen
【讨论】:
第一个 Traceback 出现此错误(最近一次调用最后一次):文件“C:/Users/Grant/Desktop/finally2.py”,第 4 行,在应该是:
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 行,在import urllib.request
用于 python 3。这应该可以为您工作。以上是关于NameError:名称“urlopen”未定义的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“NameError:名称方法名称未定义”? [复制]
奇怪的 NameError:未定义全局名称“StrList”