2013-06-26 120 views
1

確定這是我的最後一個問題,所以我終於找到了一個api,打印良好,這有效,但我的問題是即時通訊錯誤,如果有人可以看看這個爲我,並告訴我什麼是錯的這將是巨大的NameError:name'urlopen'沒有被定義

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 

回答

9

您沒有導入名稱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這是不是一個好主意。

+0

現在收到這個錯誤 回溯(最近通話最後一個): 文件 「C:/Users/Grant/Desktop/finaly.py」,1號線,在 從urllib的進口的urlopen 導入錯誤:無法導入名稱的urlopen – apples723

+0

@ apples723你正在使用python3。看到更新的答案。 – Elazar

+0

我改變了你說的,但現在得到這個錯誤追溯(最近呼叫最後): 文件「C:/Users/Grant/Desktop/finaly.py」,第4行,在 request = urllib.urlopen(「http ://api.aerisapi.com/observations/Urbandale,IA?client_id=QD2ToJ2o7MKAX47vrBcsC&client_secret=0968kxX4DWybMkA9GksQREwBlBlC4njZw9jQNqdO「) NameError:名稱'urllib'沒有被定義爲hasle而感到遺憾,但是這個學習在我的pi代碼中是全新的,一週前得到 – apples723

2

Python不知道你提到的urlopen(第4行)是urlliburlopen。你有兩個選擇:

  1. 告訴Python的,它是 - 與urllib.urlopen
  2. 更換urlopen告訴Python中,要urlopen所有引用來自urllib一:更換線import urllibfrom urllib import urlopen
+0

與第一個Traceback(最近呼叫的最後一個)得到此錯誤: 文件「C:/Users/Grant/Desktop/finally2.py」,第4行,在 request = urllib.urlopen(「http:// api.aerisapi.com/observations/Urbandale,IA?client_id=QD2ToJ2o7MKAX47vrBcsC&client_secret=0968kxX4DWybMkA9GksQREwBlBlC4njZw9jQNqdO「) AttributeError的:‘模塊’對象有沒有屬性‘的urlopen’和第二個我得到thisTraceback(最新最後調用): 文件」 C:/Users/Grant/Desktop/finally2.py「,第1行,在 from urllib import urlopen ImportError:無法導入名稱urlopen – apples723

1

它應該是:

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() 

您沒有特別關注rt urllib庫中的urlopen()方法。

+0

我得到這個錯誤Traceback(最近調用最後一個): 文件」C:/ Users/Grant/Desktop/finally2.py「,第1行,在 from urllib import urlopen ImportError:無法導入名稱urlopen – apples723

+0

這不是我的建議..嘗試運行上面寫的內容;我測試過它,它工作。 – msturdy

+0

rü運行python 2或3即時消息運行3 – apples723