aeris ☣ 🇫🇷
Follow

Pourquoi je hais python, version 147586135796163198798461631

>>> a = ['foo']
>>> a+= 'bar'
>>> a
['foo', 'b', 'a', 'r']

😠

@aeris

>>> a = ['foo']
>>> a+= ['bar']
>>> a
['foo', 'bar']

@dj Oui ben « va mourir, python. cordialement » 😂

@aeris

Guido van Rossum viens de démissionner, propose toi comme remplaçant et tu essaye de faire de python ce que tu veux

@aeris je trouve ça logique, puisque "bar" est une chaîne de caractères...

@cesese C’est dangereux au possible, surtout sur un langage blindé de duck typing…
Je préfère le comportement de ruby…

[1] pry(main)> a = %w[foo]
=> ["foo"]
[2] pry(main)> a += 'bar'
TypeError: no implicit conversion of String into Array
from (pry):2:in `__pry__'
[3] pry(main)> a += 'bar'.chars
=> ["foo", "b", "a", "r"]

@cesese Ça t’évite de te tirer une grosse balle dans le pied sans t’en rendre compte…

@aeris j'imagine que c'est une question de façon de voir les choses, vu que ce que fait python m'est naturel, j'ai pas ce problème.

@aeris @cesese
Mais mais mais...

$ python
Python 2.7.15rc1
[GCC 7.3.0] on linux2
>>> a = ['foo']
>>> a+= ['bar']
>>> a
['foo', 'bar']

$ python3
Python 3.6.5
[GCC 7.3.0] on linux
>>> a = ['foo']
>>> a+= ['bar']
>>> a
['foo', 'bar']

Comment tu t'y prends ?

@aeris
"Bonjour je fais n'importe quoi et ça marche pas"

['foo'] + ['bar'] a du sens

@amj Sauf que c’était supposé être un putain de tableau et pas une fucking string…
Et que python ne hurle absolument pas à la mort… Te vraquant tout le reste de ton code derrière parce qu’il bosse sur nawak…

@amj Le soucis arrive quand tu fais

tableau1 + tableau2

et que pour une raison ou une autre tableau2 n’en est pas un mais une chaîne de caractère.

Ce genre de chose se produit régulièrement dans des boucles

for element in tableau:
print("I got a nice {}".format(element))

Si tableau est une chaîne de caractère ben #python ne gueule pas mais fera très certainement de la 💩

(cc @aeris)

@aeris En général, on utilise la méthode .append() rajouter des éléments dans une liste. Quelque chose t’empêche de t’en servir dans ton cas précis ?

@aruban35mm Ben que c’est pas supposé être un str mais bien une list… Et que duck-typing powered…

@aruban35mm Et donc au lieu de planter violemment parce que l’utilisateur a saisi de la merde, ben… Ça continue à s’exécuter sur de la merde…

@aruban35mm Et donc au lieu de faire (au pire) un « rm -rf bar » comme attendu (et au mieux planter parce que [] + "" = erreur), ben tu « rm -rf b a r »…

@aeris @aruban35mm le mec qui fait du python pour "rm -rf" sans vérifier, je pense qu'il doit se poser d'autres questions que "list() + str() = ?". Si tu fais de l'objet, t’utilise les méthodes pour éviter les effets de bords. Quelque soit le langage, les tests sont nécessaires.

Sign in to participate in the conversation
Mastodon

PARCE QUE C’EST MON INSTANCE !