2010-08-31 46 views
1

J'ai besoin de détecter si un descripteur utilise le mode binaire ou le mode texte - ceci est nécessaire pour pouvoir encoder/décoder les str/octets. Comment puis je faire ça?Comment assurer que filehandle.write() n'échoue pas en raison de problèmes de conversions str/bytes?

Lorsque vous utilisez le mode binaire myfile.write(bytes) fonctionne, et en mode texte myfile.write(str) fonctionne.

L'idée est que j'ai besoin de savoir ceci afin de pouvoir encoder/décoder l'argument avant d'appeler myfile.write(), sinon il peut échouer avec une exception.

Répondre

1

Que diriez-vous résoudre votre problème de cette façon:

try: 
    f.write(msg) 
except TypeError: 
    f.write(msg.encode("utf-8")) 

Cela fonctionne même si votre poignée ne fournit pas .mode.

4

http://docs.python.org/library/stdtypes.html#file.mode

>>> f = open("blah.txt", "wb") 
>>> f 
<open file 'blah.txt', mode 'wb' at 0x0000000001E44E00> 
>>> f.mode 
'wb' 
>>> "b" in f.mode 
True 

Avec cette mise en garde:

file.mode

Le mode d'E/S pour le fichier. Si le fichier a été créé à l'aide de la fonction intégrée open() , ce sera la valeur du paramètre mode. Il s'agit d'un attribut en lecture seule et peut ne pas être présent sur tous les objets de type fichier.

+0

Merci, Jeremy, j'ai voté votre réponse mais j'ai choisi l'autre réponse car c'est une meilleure solution pour mon problème (disons que c'est plus pythonique). – sorin