2016-03-21 1 views
1

FYI - ce programme utilise Django mais je suis et non en le marquant comme tel car ce n'est pas un problème django. Le code django est ici pour le contexteReprésentation Unicode d'un objet dans un objet (en python)

~~ ~~ Contexte

j'ai découvert un bug que j'avais dans un programme. En bref, j'utilise urlparse.urlparse pour obtenir des informations d'un URI donné et l'enregistrer dans une base de données.

Le but est de faire quelque chose comme ceci:

url = urlparse.urlparse('http://somedomain.com/yada/yada') 
some_instance = Domain(address=url.netloc) 

~~ ~~ Le problème

Le problème est que à cause d'une erreur dans le codage, la base de données est pleine de urlparse objet. Par conséquent, en se rappelant l'instance de la base de données le résultat est une chaîne unicode:

some_instance = Domain.objects.get(pk=XX) 
some_instance.address 
>>> u"ParseResult(scheme=u'http', netloc=u'www.somedomain.com', path=u'/', params='', query=u'_vsrefdom=googleppc', fragment='')" 

Oops.

~~ ~~ La question

Il est clair que je dois aller en arrière et corriger un certain nombre de dossiers. Ce que je suis curieux de savoir, c'est s'il y a un bon moyen pythonien de restaurer une représentation unicode d'un objet (pas le retour réel .__unicode__()) dans l'objet lui-même.

Pensées?

J'ai regardé autour un peu sur Google et StackOverflow, le problème est toute recherche que j'ai rencontré traite avec la sortie du .__unicode__() et pas toute la représentation elle-même.

Répondre

5

Pour cela, vous pouvez utiliser eval; même si généralement mal vu, il est acceptable dans ce cas.

>>> from urlparse import ParseResult 
>>> s = u"ParseResult(scheme=u'http', netloc=u'www.somedomain.com', path=u'/', params='', query=u'_vsrefdom=googleppc', fragment='')" 
>>> pr = eval(s) 
>>> pr.scheme, pr.netloc 
(u'http', u'www.somedomain.com') 
+0

Belle. C'est ce dont j'avais besoin. Merci. (Marquera comme réponse quand le temps passera) –