inconsistency in converting from/to hex

Ned Batchelder ned at nedbatchelder.com
Sat Nov 16 18:35:35 EST 2013


On Saturday, November 16, 2013 5:16:58 PM UTC-5, Laszlo Nagy wrote:
> We can convert from hex str to bytes with bytes.fromhex class method:
> 
>  >>> b = bytes.fromhex("ff")
> 
> But we cannot convert from hex binary:
> 
>  >>> b = bytes.fromhex(b"ff")
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> TypeError: must be str, not bytes
> 
> We don't have bytes_instance.tohex() instance method.
> But we have binascii.hexlify. But binascii.hexlify does not return an 
> str. It returns a bytes instance instead.
> 
>  >>> import binascii
>  >>> binascii.hexlify(b)
> b'ff'
> 
> Its reverse function binascii.unhexlify can be used on str and bytes too:
> 
>  >>> binascii.unhexlify(b'ff')
> b'\xff'
>  >>> binascii.unhexlify('ff')
> b'\xff'
> 
> Questions:
> 
> * if we have bytes.fromhex() then why don't we have bytes_instance.tohex() ?
> * if the purpose of binascii.unhexlify and bytes.fromhex is the same, 
> then why allow binary arguments for the former, and not for the later?
> * in this case, should there be "one obvious way to do it" or not?

The standard library is not always as consistent as we might like.  I don't think there is a better answer than that.

This will work if you want to use fromhex with bytes:

    b = bytes.fromhex(b"ff".decode("ascii"))


--Ned.



More information about the Python-list mailing list