Forum Programmation.python TypeError après un grep

Posté par  .
Étiquettes : aucune
0
7
oct.
2008
Bonjour,

Voici le code:

#!/usr/bin/python
# -*- coding: utf8 -*-

import sys

rep1="zoo"
rep2=u"zéro"

print ("%s" % rep1).encode(sys.stdout.encoding,'replace')
print ("%s" % rep2).encode(sys.stdout.encoding,'replace')


Quand je fais "python fichier.py", cela se passe bien. Par contre, quand je fais, "python fichier.py | grep a", j'ai le message d'erreur suivant:


Traceback (most recent call last):
File "fichier.py", line 9, in
print ("%s" % rep1).encode(sys.stdout.encoding,'replace')
TypeError: encode() argument 1 must be string, not None


Là, je suis un peu perdu ...

Je débute un peu en python et j'avoue avoir un peu de mal avec l'encodage (str vs unicode).

Merci de votre aide.

A bientôt.
  • # Excès de zèle

    Posté par  . Évalué à 2.


    #!/usr/bin/python
    # -*- coding: utf8 -*-

    import sys
    rep1="zoo"
    rep2="zéro"
    print ("%s" % rep1)
    print ("%s" % rep2)


    Comme ça ça marche ...

    Tu déclare un encodage en utf-8 tu n'a donc tes multiples conversions explicites font tout foirer.
  • # Ce que veut dire l'erreur

    Posté par  (site web personnel) . Évalué à 2.

    C'est très bien d'utiliser des chaînes unicode et d'encoder les choses. (C'est ce qu'il faut faire™). Le problème est que le charset de stdout n'est pas défini quand tu pipes la sortie (il vaut None). Une correction simple (mais peut-être mauvaise) serait de tester si sys.stdout.encoding est, et dans le cas contraire de ne pas encoder la sortie, le truc après le pipe devant se débrouiiller tout seul.
    • [^] # Re: Ce que veut dire l'erreur

      Posté par  . Évalué à 1.

      Merci.

      En fait, je débute en Python et j'aimerais dès le départ traiter correctement cette histoire d'encodage qui pour l'instant me déstabilise un peu !

      Du coup, est ce qu'il est préférable d'utiliser des chaînes str ou unicode en interne dans le code ?

      A bientôt.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.