Are dicts supposed to raise comparison errors
MRAB
python at mrabarnett.plus.com
Tue Jul 31 11:28:30 EDT 2018
On 2018-07-31 08:40, Robin Becker wrote:
> A bitbucket user complains that python 3.6.6 with -Wall -b prints warnings for some reportlab code; the
> example boils down to the following
>
> ##########
> C:\code\hg-repos\reportlab\tmp>cat tb.py
> if __name__=='__main__':
> d={'a':1}
> d[b'a'] = d['a']
> ##########
>
>
> C:\code\hg-repos\reportlab\tmp>\python36\python -Wall -b tb.py
> tb.py:3: BytesWarning: Comparison between bytes and string
> d[b'a'] = d['a']
>
> I had always assumed that dicts didn't care about the type of keys although some types might cause issue with hashability, but
> obviously the implementation seems to be comparing b'a' with 'a' (I suppose because they hash to the same chain).
>
> Is this code erroneous or is the warning spurious or wrong?
>
The warning looks wrong to be.
In Python 2, u'a' and b'a' would be treated as the same key, but in
Python 3 they are distinct and can co-exist.
Something for Python's bug tracker, I think!
More information about the Python-list
mailing list