Puis-je faire décoder(erreurs=“ignorer”) la valeur par défaut pour toutes les chaînes de caractères en Python 2.7 programme?
J'ai un Python 2.7 programme qui écrit les données provenant de diverses applications externes. Je ne cesse de se faire mordre par des exceptions quand j'écris dans un fichier jusqu'à ce que je ajouter .decode(errors="ignore")
de la chaîne écrite. (FWIW, ouverture du fichier en tant que mode="wb"
ne pas résoudre ce problème.)
Est-il un moyen de dire "ignorer les erreurs de codage sur toutes les chaînes de caractères dans ce champ d'application"?
OriginalL'auteur Paul Hoffman | 2012-03-02
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas redéfinir des méthodes sur des types intégrés, et vous ne pouvez pas modifier la valeur par défaut de la
errors
paramètrestr.decode()
. Il y a d'autres manières d'obtenir le comportement souhaité.Légèrement plus agréable: Définir votre propre
decode()
fonction:Maintenant, vous aurez besoin de faire appel
decode(s)
au lieu des.decode()
, mais ce n'est pas trop mal, n'est-ce pas?Le hack: Vous ne pouvez pas modifier la valeur par défaut de la
errors
paramètre, mais vous peut remplacer ce que le gestionnaire par défauterrors="strict"
n':Ce sera essentiellement modifier le comportement de
errors="strict"
à la norme"ignore"
comportement. Notez que ce sera un changement global, touchant tous les modules importés.Je recommande aucune de ces deux manières. La vraie solution est d'obtenir vos encodages droit. (Je suis bien conscient que ce n'est pas toujours possible).
OriginalL'auteur Sven Marnach
Comme mentionné dans mon thread sur la question le hack de Sven Marnach est même possible sans une nouvelle fonction:
OriginalL'auteur phk
Je ne suis pas sûr de ce que votre installation est exactement, mais vous pouvez dériver une classe à partir de
str
et de remplacer son décoder méthode:Si vous puis de convertir toutes les chaînes de
easystr
, les erreurs seront ignorées silencieusement:Cela dit, décodage convertit une chaîne de caractères en unicode, ce qui ne devrait jamais être figé. Pourriez-vous comprendre ce qui l'encodage des chaînes à l'aide et donner ce que l'
encoding
argumentdecode
? Que ce serait une meilleure solution (et vous pouvez encore le faire défaut dans la façon décrite ci-dessus).Encore une autre chose que vous devez faire est d'essayer de lire vos données différemment. Le faire de cette façon et les erreurs de décodage peuvent bien disparaître:
OriginalL'auteur alexis