Seite 1 von 1

Möglicher Bug in python 3

Verfasst: Samstag 20. November 2010, 13:20
von acoolon
Moin,

mir ist sehr wohl bewusst, dass es einen Bugtracker gibt, ich bin mir jedoch hiermit nicht ganz sicher.
Da will ich lieber dieses Forum füllen statt einen falschen Eintrag im Bugtracker zu hinterlassen.

Mir ist folgende Unstimmigkeit aufgefallen, ich denke Code verdeutlicht das am Besten:

Code: Alles auswählen

b = b'\x00\x01'
print(repr(b[-1]))
print(b[-1] == b'\x01')
print(repr(b[:]))

Code: Alles auswählen

Python 2.7 (r27:82500, Oct 20 2010, 03:28:42) 
[GCC 4.5.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> b = b'\x00\x01'
>>> print(repr(b[-1]))
'\x01'
>>> print(b[-1] == b'\x01')
True
>>> print(repr(b[:]))
'\x00\x01

Code: Alles auswählen

Python 3.1.2 (r312:79147, Oct  4 2010, 12:45:09) 
[GCC 4.5.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> b = b'\x00\x01'
>>> print(repr(b[-1]))
1
>>> print(b[-1] == b'\x01')
False
>>> print(repr(b[:]))
b'\x00\x01'
Ist das Absicht?

Danke, aco

Re: Möglicher Bug in python 3

Verfasst: Samstag 20. November 2010, 13:40
von BlackJack
@acoolon: Ja das ist Absicht. Die Elemente sind bei Python 3 keine Byteketten der Länge 1 mehr, sondern Zahlen mit dem jeweiligen Bytewert an dem Index:

Code: Alles auswählen

>>> b
b'\x00\x01'
>>> type(b[-1])
<class 'int'>
>>> b'\xff'[-1]
255
Das heisst der `repr()`-Aufruf ist in Deinem Beispiel in Python 3 überflüssig weil `repr()` und `str()` bei ganzen Zahlen das gleiche Ergebnis liefern.

Re: Möglicher Bug in python 3

Verfasst: Samstag 20. November 2010, 14:35
von acoolon
Ok, danke.

Scheint mit ein wenig inkonsistent, aber dann muss man damit halt leben.

aco

Re: Möglicher Bug in python 3

Verfasst: Samstag 20. November 2010, 19:50
von Darii
acoolon hat geschrieben:Scheint mit ein wenig inkonsistent, aber dann muss man damit halt leben.
Einfach Python 3 vermeiden, so lange es geht…die „Bytesstrings“ sind ein einziger „Bug-by-Intention“ in Python 3.