2016-12-03 69 views
1

我使用蟒3和在管線42中的代碼引起該問題類型錯誤:對類字節對象是必需的,而不是「STR」 -python

line 42, in print ('Retrieved',len(data),'characters',data[:20].replace('\n',' ')) TypeError: a bytes-like object is required, not 'str'

以我的程序行-42是

print ('Retrieved',len(data),'characters',data[:20].replace('\n',' ')) 

我將非常感謝您的幫助。下面

是完整colde:

import urllib 
import urllib.request 
import sqlite3 
import json 
import time 
import ssl 

# If you are in China use this URL: 
# serviceurl = "http://maps.google.cn/maps/api/geocode/json?" 
serviceurl = "http://maps.googleapis.com/maps/api/geocode/json?" 

# Deal with SSL certificate anomalies Python > 2.7 
# scontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
scontext = None 

conn = sqlite3.connect('geodata.sqlite') 
cur = conn.cursor() 

cur.execute(''' 
CREATE TABLE IF NOT EXISTS Locations (address TEXT, geodata TEXT)''') 

fh = open("where.data", encoding="utf-8") 
count = 0 
for line in fh: 
    if count > 200 : break 
    address = line.strip() 
    print ('') 
    cur.execute("SELECT geodata FROM Locations WHERE address= ?", ((address),)) 

    try: 
     data = cur.fetchone()[0] 
     print ("Found in database ",address) 
     continue 
    except: 
     pass 

    print ('Resolving', address) 
    url = serviceurl + urllib.parse.urlencode({"sensor":"false", "address": address}) 
    print ('Retrieving', url) 
    uh = urllib.request.urlopen(url, context=scontext) 
    data = uh.read() 
    print ('Retrieved',len(data),'characters',data[:20].replace('\n',' ')) 
    count = count + 1 
    try: 
     js = json.loads(str(data)) 
     # print js # We print in case unicode causes an error 
    except: 
     continue 

    if 'status' not in js or (js['status'] != 'OK' and js['status'] != 'ZERO_RESULTS') : 
     print ('==== Failure To Retrieve ====') 
     print (data) 
     break 

    cur.execute('''INSERT INTO Locations (address, geodata) 
      VALUES (?, ?)''', (buffer(address),buffer(data))) 
    conn.commit() 
    time.sleep(1) 

print ("Run geodump.py to read the data from the database so you can visualize it on a map.") 

回答

0

我與下面的代碼排序:

打印( '條目',LEN(數據), '字符',數據[20]。 decode()。replace('\ n',''))

相關問題