2017-03-18 9 views
0

は、ここでは、コードです:私は、このエラーにして実行しているようはAttributeError:「strの」オブジェクトは、Python「を読んで」は属性を持っていません。..

import urllib, json, unicodedata, webbrowser 

url = "https://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=10&format=json" 



response = urllib.urlopen(url) 
data = json.loads(response.read()) 
while True: 
    if data.get("data") == None: 
     print "server error, trying again" 
     data = json.loads(response.read()) 
    else: 
     break 

for a in data["query"]["random"]: 
    print a["title"] 
    userread = raw_input("Would you like to read this article? y/n") 
    if userread.lower() == "y": 
     articleid = a["id"] 
     articleurl = "https://en.wikipedia.org/?curid=" + articleid 
     webbrowser.open_new(articleurl) 

、forループ、それは重要ではありません。

File "randomwiki.py", line 12, in <module> 
    data = json.loads(response.read()) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 384, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

URLは、JSONのWikipediaのランダムページ記事APIです。私は問題が何であるか分かりません。どんな助け?

答えて

0

urllib.readはバイトオブジェクトを受け取りますが、json.loadsは文字列を受け取ります。あなたがしたい場合は 、あなたの代わりにrequestsモジュールを使用することができます。

import requests 
response = requests.get(url) 
data = json.loads(response.read()) 

それとも、もちろん、urllib.read関数からの出力をデコードすることができます。

data = json.loads(response.read().decode()) 
関連する問題