2017-05-26 2 views
0

Quelqu'un peut-il aider à traduire le code suivant de 2.xx à 3.6? Je crois que les problèmes que j'ai proviennent du fait que la bibliothèque urllib2 a changé.Traduire à partir de Python 2.xx à 3.6

from urllib2 import Request, urlopen 

values = """ 
    { 
    "carrierCode": "fedex", 
    "serviceCode": null, 
    "packageCode": null, 
    "fromPostalCode": "78703", 
    "toState": "DC", 
    "toCountry": "US", 
    "toPostalCode": "20500", 
    "toCity": "Washington", 
    "weight": { 
     "value": 3, 
     "units": "ounces" 
    }, 
    "dimensions": { 
     "units": "inches", 
     "length": 7, 
     "width": 5, 
     "height": 6 
    }, 
    "confirmation": "delivery", 
    "residential": false 
    } 
""" 

headers = { 
    'Content-Type': 'application/json', 
    'Authorization': '< Enter your Basic Authorization string here >' 
} 
request = Request('https://ssapi.shipstation.com/shipments/getrates', 
data=values, headers=headers) 

response_body = urlopen(request).read() 
print response_body 

J'ai fait les modifications proposées au code par @tmadam et je suis maintenant obtenir l'erreur suivante:

retraçage (appel le plus récent en dernier): fichier « C:/Users/carte/PycharmProjects/Reverb/SSAPI.py ", ligne 37, dans response_body = urlopen (requête) .read() Fichier" C: \ Utilisateurs \ map \ AppData \ Local \ Programmes \ Python \ Python36-32 \ lib \ urllib \ request.py ", ligne 223, dans urlopen Renvoie opener.open (url, data, timeout) Fichier" C: \ Utilisateurs \ map \ AppData \ Local \ Programmes \ Python \ Python36-32 \ lib \ urllib \ request. py ", ligne 524, en ouvert req = meth (req) Fichier "C: \ Utilisateurs \ mappage \ AppData \ Local \ Programmes \ Python \ Python36-32 \ lib \ urllib \ request.py", ligne 1248, dans do_request_ raise TypeError (msg) TypeError: les données POST doivent être des octets, des itérables d'octets ou un objet fichier. Il ne peut pas être de type str.

Des idées sur pourquoi cela se passe-t-il?

Répondre

0

Request et urlopen font partie de urllib.request en python 3.
Vous pouvez toujours utiliser votre script si vous changez vos importations:

from urllib.request import Request, urlopen 

imprimer est une fonction en Python 3. Il faut donc utiliser comme ça :

print(response_body) 
+0

Hey @tmadam J'ai fait ces modifications mais je reçois maintenant une erreur. J'ai modifié mon post précédent pour refléter cette erreur. Des idées? – bhess

+0

Oui, les données POST doivent être des octets. Vous pouvez résoudre ce problème en encodant 'values', par exemple:' values ​​= values.encode ("utf-8") ' –