Padding en

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Jun 26 21:19:56 EDT 2007


En Tue, 26 Jun 2007 15:57:33 -0300, Sebastian Bassi  
<sbassi-l3QW9mi/NR0r3pD5o9FTuti2O/JbrIOy at public.gmane.org> escribió:

> Si, pero resulta que lo tuve que complicar un poco porque sha esta en
> distintas librerias segun la version de Python y tambien no puedo
> hacer un upper() directamente sin verificar que manden un string
> primero. Tambien otra diferencia es que el encode64 en Python<2.5
> viene con un EOL mientras que en 2.5, no.  Al final queda asi:
>
> def seguid(seq):
>     try:
>         #Python 2.5 sha1 is in hashlib
>         import hashlib
>         m = hashlib.sha1()
>     except:
>         #For older versions
>         import sha
>         m = sha.new()

A mi me ponen nervioso los except sin nada :) asi que you usaria: except  
ImportError:
Sino, estarias atrapando tambien *cualquier* otra excepcion, que quizas no  
tiene nada que ver con hashlib; por ejemplo, apretar Ctrl-C para abortar  
el programa no sirve cuando esta ejecutando justo esa parte del codigo.

>     if type(seq)!="str":
>         seq=seq.tostring().upper()
>     else:
>         seq=seq.upper()

Aparte de los muy sabios consejos que te dieron sobre *no* testear el tipo  
explicitamente, hay que notar que así como está escrito, nunca se va a  
usar el tostring() porque "str" no deberia estar escrito entre comillas  
(deberia decir: if type(seq)!=str)

>     m.update(seq)
>     try:
>         #For Python 2.5
>         return base64.b64encode(m.digest()).rstrip("=")
>     except:
>         #For older versions
>         import os
>         return base64.encodestring(m.digest())\
>                .replace(os.linesep,"").rstrip("=")

[Aparte del except, que deberia atrapar sólo AttributeError]. encodestring  
agrega un '\n', fijo, no usa os.linesep (que en Windows vale '\r\n', y  
entonces te fallaría).

-- 
Gabriel Genellina



More information about the Python-list mailing list