2017-03-18 3 views
0

Hier ist der Code:Attribute: ‚str‘ Objekt hat kein Attribut ‚lesen‘ 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) 

nun die for-Schleife nicht so wichtig ist, wie ich in diesem Fehler ausgeführt wird:

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 

Die URL ist die zufällige Seitenartikel-API von Wikipedia in JSON. Ich bin mir nicht sicher, was das Problem ist. Irgendeine Hilfe?

Antwort

0

Sie erhalten von der urllib.read Funktion ein Byte-Objekt, aber json.loads erhält Zeichenfolge. Wenn Sie möchten, können Sie stattdessen das requests Modul verwenden:

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

Oder Sie können natürlich, dekodieren die Ausgabe von der urllib.read Funktion.

data = json.loads(response.read().decode()) 
Verwandte Themen