[python-users] Fiese Falle

Daniel Hepper daniel.hepper at gmail.com
Mo Jun 13 09:17:39 CEST 2016


Hallo zusammen,

Python ist nun mal eine dynamisch, strikt typisierte Sprache. Darum wird
"-1" nicht als Zahl behandelt, ausser man konvertiert es explizit in eine.

Unter Java (statisch, strikt typisiert) könnte man dank Generics in genau
die gleiche "fiese Falle" laufen.

public static <T extends Comparable<T>> T min( T m, T n )
{
  return m.compareTo( n ) < 0 ? m : n;
}

System.out.println( min( "-1", "-2" ) );              // -1

System.out.println( min( -1, -2 ) );                      // -2

Wirklich interessant wird es m.E. erst wenn man Typen mischt.

$ python
Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> min(-1, '-2')
-1

$ python3.4
Python 3.4.3 (default, Aug 26 2015, 18:29:14)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> min(-1, "-2")
>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()

Wer noch mehr solcher Kuriositäten sehen will dem sei der sehr
unterhaltsame Lightning-Talk "Wat" zu empfehlen:
https://www.destroyallsoftware.com/talks/wat

Viele Grüße,
Daniel

2016-06-13 8:13 GMT+02:00 Dirk Hünniger <python-users at uni-koeln.de>:

> ________________________________________
>
> Diese Mail erhalten Sie ueber die Mailingliste python-users der
> Universitaet zu Koeln
> Nachrichten an: python-users at uni-koeln.de
> Abonnement und Benutzereinstellungen:
> https://lists.uni-koeln.de/mailman/listinfo/python-users
> Listenarchiv: http://pycologne.de/mlsearch.html
>
> pyCologne Homepage: http://pycologne.de/
>
>
> ---------- Forwarded message ----------
> From: "Dirk Hünniger" <dirk.hunniger at googlemail.com>
> To: python-users at uni-koeln.de
> Cc:
> Date: Mon, 13 Jun 2016 08:13:13 +0200
> Subject: Re: [python-users] Fiese Falle
> Naja,
> ich bin ebenfalls der Ansicht, dass hier etwas mit den Typen nicht so ist
> wie man es vielleicht ohne nachzudenken erwarten würde. Man könnte explizit
> formulieren, dass es sich bei -1 und -2 jeweils um Integer handelt. Dies
> würde begünstigt, wenn man Typen immer vollständig ausschriebe, wie man es
> in z.B. in Java tut. In Python hat man allerdings durch den Aufruf der
> Funktion int ähnliche Möglichkeiten, wenn man auch selbst die volle
> Verantwortung trägt dies auch zu tun. Die Alternative die Ordnungsrelation
> auf Strings abzuschaffen, scheint mir weniger aussichtsreich, da man ja
> gelegentlich Dinge alphabetisch sortieren möchte und ferner Strings in AVL
> o.ä. Bäumen verwalten möchte.
> Viele Grüße Dirk
>
> On 12.06.2016 23:14, Michael Kesper wrote:
>
>> Hallo Dirk, hallo zusammen,
>>
>> in der Tat:
>>
>> Python 2.7.9 / Python 3.4.2:
>> >>> print(min("-1","-2"))
>> -1
>> >>> print(max("-1","-2"))
>> -2
>>
>> Erwartet hätte ich eigentlich eine TypeError Exception.
>>
>> Viele Grüße
>> Michael
>> ________________________________________
>>
>> Diese Mail erhalten Sie ueber die Mailingliste python-users der
>> Universitaet zu Koeln
>> Nachrichten an: python-users at uni-koeln.de
>> Abonnement und Benutzereinstellungen:
>> https://lists.uni-koeln.de/mailman/listinfo/python-users
>> Listenarchiv: http://pycologne.de/mlsearch.html
>>
>> pyCologne Homepage: http://pycologne.de/
>>
>
>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.uni-koeln.de/pipermail/python-users/attachments/20160613/7eebe671/attachment.html>


Mehr Informationen über die Mailingliste python-users