Qui, non seulement c'est moche et lent, semble maladroit.
Il peut prendre un certain temps d'adaptation, mais c'est la pythonic façon de faire. Comme il a été déjà souligné, les alternatives sont pires. Mais il est un autre avantage de faire les choses de cette façon: le polymorphisme.
L'idée centrale derrière le duck-typing est que "si ça marche et parle comme un canard, alors c'est un canard." Que faire si vous décidez que vous avez besoin à la sous-classe de la chaîne de sorte que vous pouvez modifier la façon de déterminer si quelque chose peut être converti en float? Ou si vous décidez de tester un autre objet entièrement? Vous pouvez faire ces choses sans avoir à changer le code ci-dessus.
D'autres langues résoudre ces problèmes par l'utilisation d'interfaces. Je vais économiser de l'analyse de la solution qui est mieux pour un autre thread. Le point, cependant, est que python est décidément sur le duck-typing côté de l'équation, et vous allez probablement avoir à s'habituer à la syntaxe de ce genre si vous prévoyez de faire beaucoup de programmation en Python (mais cela ne veut pas dire que tu dois aimer ça, bien sûr).
Une autre chose que vous pourriez vouloir prendre en considération: Python est assez rapide à lancer et rattraper les exceptions par rapport à beaucoup d'autres langues (30x plus rapide que .Net par exemple). Diable, que le langage lui-même, même lève des exceptions à communiquer de façon non exceptionnelle, programme normal conditions (à chaque fois que vous utilisez une boucle for). Donc, je ne m'inquiéterais pas trop sur les aspects de la performance de ce code jusqu'à ce que vous remarquez un problème important.