[Python] TypeError sur une concaténation de chaines [Résolu]

TypeError sur une concaténation de chaines [Résolu] [Python] - Python - Programmation

Marsh Posté le 09-07-2004 à 16:10:36    

Salut,
 
j'ai un script qui fait des concaténations de chaines, pour stocker un grand texte (un mail pour être plus précis).
 
La variable qui contient ce texte, s'appelle mailp, je l'affecte une première fois au début de la méthode qui génère le texte.
Ensuite, j'essaie de lui affecter la suite du texte que je veux envoyer, mais j'ai cette erreur là :

Citation :


Traceback (most recent call last):
  File "./xml2db.py", line 65, in ?
    mail.send()
  File "./alerteEmail.py", line 58, in send
    msg = MIMEText(m.getText())
  File "./genEmail.py", line 29, in getText
    return self.getAlerte()
  File "./genEmail.py", line 138, in getAlerte
    mailp = mailp + """
TypeError: unsubscriptable object


 
J'ai essayé d'autres manière de faire ça :
- mailp = mailp + "\n\ [...] " au lieu d'utiliser les """
- mailp2 = mailp + """ [...]
- mailp = """ [...]
- mailp2 = """ [...]
Bref, plusieurs moyens, mais je vois pas du tout d'où ça vient :/
Si je fais un print mailp avant de faire cette affectation, j'ai bien mon texte qui s'affiche, donc le debut du script marche bien.
 
Le pire, c'est que ça marche quand je fais des essais directement dans une console Python :o
 
Merci de m'aider :)


Message édité par multani-1 le 09-07-2004 à 16:53:18
Reply

Marsh Posté le 09-07-2004 à 16:10:36   

Reply

Marsh Posté le 09-07-2004 à 16:20:06    

J'ai un peu de mal a piger ce qui se passe, faudrait ptet un peu plus de code
 
je vois pas du tout ce que tu tentes de faire (""" c'est un string vide suivi d'une apostrophe, essaie "\"" si tu veux ajouter une apostrophes a ton truc), et je ne sais meme pas de quelle maniere tu "affectes" mailp ni si tu fais des modifs préalables
 
donne plus de code stp

Reply

Marsh Posté le 09-07-2004 à 16:21:51    

t'es sur que mailp est une string ?

Reply

Marsh Posté le 09-07-2004 à 16:24:41    

Hum, effectviement, c'est pas super clair :/
 
Bon, j'ai ça dans ma méthode :

Code :
  1. mailp = """<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
  2. <html>
  3.   <head>
  4.   <title>gnagnagna</title>
  5.   [... etc ...]"""
  6. for a in self.tabAnnonce:
  7.   sql = "[...]" % a
  8.   try:
  9.     self.connexion = MySQLdb.connect (hostname, username, password, atabase)
  10.     self.cursor = self.connexion.cursor ()
  11.   except MySQLdb.Error, e:
  12.     print "MySQL: error %d: %s" % (e.args[0], e.args[1])
  13.     self.error = self.error + 1
  14.   else:
  15.     res = self.cursor.execute(sql)
  16.     mailp = mailp + """
  17.       <li id="annonce">
  18.         <div id="minitature">
  19.           <a href='[... etc ...]"""


Bon, l'indentation chie, mais j'arrive pas à la mettre correctement, dans mon fichier c'est bon.
 
Si je suis sur que mailp est une chaine ? Ben, je l'affecte directement avec une chaine de caractère, je fais ma requête SQL, et je reaffecte mailp juste après, ya pas de raisons que ça change ... C'est une variable locale, je m'en sers juste dans cette méthode.


Message édité par multani-1 le 09-07-2004 à 16:29:00
Reply

Marsh Posté le 09-07-2004 à 16:28:15    

c'est pas normal...  
tu peux toujours faire mailp = "%s%s" % (mailp, """blabla""" ) mais t'as une erreur qui traine quelquepart, forcément.

Reply

Marsh Posté le 09-07-2004 à 16:36:25    

lorill a écrit :

c'est pas normal...  
tu peux toujours faire mailp = "%s%s" % (mailp, """blabla""" ) mais t'as une erreur qui traine quelquepart, forcément.


 
Ca marche pas non plus :( J'ai la même erreur ...
 
Par contre, mon """blabla""" est sur plusieurs lignes (c'est pour ça que je me sers de """ d'ailleurs).
Si je fais comme toi, c'est à dire mailp = "%s%s" % (mailp, """blabla""" ), ou même mailp = mailp + """blabla""", là ça marche, mais j'ai la même erreur plus bas (mais ça c'est ce qui arrive quand on traite mal le résultat d'une reque SQL :o)


Message édité par multani-1 le 09-07-2004 à 16:36:45
Reply

Marsh Posté le 09-07-2004 à 16:38:42    

multani-1 a écrit :

là ça marche, mais j'ai la même erreur plus bas (mais ça c'est ce qui arrive quand on traite mal le résultat d'une reque SQL :o)


:??:  
j'ai pas compris

Reply

Marsh Posté le 09-07-2004 à 16:41:18    

lorill a écrit :

:??:  
j'ai pas compris


 
Comme je t'ai dis (mailp = mailp + """blabla""" ), ça marche, mais je retrouve cette erreur sur les lignes de codes en dessous, où je traite ma requête SQL.
Mais j'ai fais n'importe quoi sur ce traitement SQL, c'ets normal que ça chiait.
Maintenant que c'est corrigé, le script marche, mais ça enregistre que "blabla" dans ma variable. Si je remets mon texte entre les """, ça refais l'erreur  :sweat:

Reply

Marsh Posté le 09-07-2004 à 16:41:22    

et en remplacant les """ """ par
""\
""\
"" ?
 
et tu devrais verifier le type de ton mailp avant tes affectations -_-

Reply

Marsh Posté le 09-07-2004 à 16:49:36    

Masklinn a écrit :

et en remplacant les """ """ par
""\
""\
"" ?


J'ai essayé totu à l'heure déjà (cf. 1ère manière du 1er post ;) ), sans succès :/
 

Masklinn a écrit :

et tu devrais verifier le type de ton mailp avant tes affectations -_-


 
<type 'str'>
 
Faut bien faire print mailp.__class__ ?

Reply

Marsh Posté le 09-07-2004 à 16:49:36   

Reply

Marsh Posté le 09-07-2004 à 16:53:04    

Bon, c'est bon, j'ai trouvé d'où ça venait [:benou] :
problème du résultat de ma requête SQL que je traitais mal, et que je concatenais dans mailp ... sauf que la ligne était trop grande, et que cette concaténation était en dehors de la fenêtre [:benou]
 
Désolé du dérangement :(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed