Aller au menu - Aller au contenu

[Débutant] SyntaxError: invalid syntax

À une ligne qui n'existe pas.

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne drivedric # Posté le 08/02/2012 à 03:34:37
Libérez-nous des libéraux
Avatar
Newsers

Bonjour,

Je n'aurais normalement pas posté un sujet pour une erreur comme celle-ci, mais je bloque réellement. Je cherche simplement à faire ceci :

Code : Python Console
1
2
3
>>> s = show_float(0.123456) # on a un nombre flottant
>>> s # inutile de mettre ça dans une variable, mais c'est pour montrer le résultat.
'0,123' # on récupère le flottant dans une chaîne avec un "," à la place du "." et on coupe à trois chiffres après la virgule.


Voici mon code, que j'ai testé ligne à ligne dans l'interpréteur sans aucun problème :
Code : Python
1
2
3
4
5
6
7
def show_float(number):
    if type(number) is not float:
        raise TypeError("Is not a float number")
    number = str(number)
    number = number.split(".")
    three  = number[1][:3]
    return "".join(number[0]) + ',' + three


Et voici l'erreur :
Code : Python TraceBack
1
2
3
4
5
Traceback (most recent call last):
File "ex.py", line 8

   ^
SyntaxError: invalid syntax


Comme vous pouvez le remarquer, l'erreur se trouve bien évidemment à une ligne qui n'existe pas. C'était évident.
J'ai fait une petite recherche, mais je n'ai rien trouvé qui fonctionne.

Merci de votre aide !


PS: Ce n'est pas vraiment grave, car il est évident que mon code est fonctionnel. Mais l'erreur m'embête tout de même, je me demande qu'est-ce qui cause cela.
 
Publicité # Posté le 08/02/2012 à 03:34:37

Hors ligne nohar # Posté le 08/02/2012 à 07:45:58
Had a quote before it was cool
Avatar
Validateurs

Ville : Saint hilarion
Pays : France métropolitaine
Études : IPI

Yo, collègue.

J'ai copié-collé ton code et importé ça dans python, je n'ai eu absolument aucun problème.

L'hypothèse la plus vrasemblable serait que Python bute sur un caractère invisible quelque part (par exemple un résidu de caractère unicode, ou que sais-je). Et bien sûr, comme tous les caractères invisibles, on ne peut pas le détecter facilement…

Essaye de retaper ton module au propre ?
Dans un autre éditeur ?
En insérant bien un retour à la ligne à la fin de ton module ?
Édité le 08/02/2012 à 13:19:21 par nohar
 
Hors ligne fred1599 # Posté le 08/02/2012 à 09:25:19
Avatar

La ligne ci-dessous n'est pas conseillée.

Code : Python
1
if type(number) is not float:


Mieux vaut isinstance

Code : Python
1
if not isinstance(number, float):
Hors ligne drivedric # Posté le 08/02/2012 à 14:25:53
Libérez-nous des libéraux
Avatar
Newsers

Citation : nohar
Yo, collègue.

J'ai copié-collé ton code et importé ça dans python, je n'ai eu absolument aucun problème.

L'hypothèse la plus vraisemblable serait que Python bute sur un caractère invisible quelque part (par exemple un résidu de caractère unicode, ou que sais-je). Et bien sûr, comme tous les caractères invisibles, on ne peut pas le détecter facilement…

Essaye de retaper ton module au propre ?
Dans un autre éditeur ?
En insérant bien un retour à la ligne à la fin de ton module ?


En fait, j'ai effacé et j'ai réécrit le code dans le même fichier et j'avais toujours le même problème. Ensuite, j'ai supprimé le fichier et je l'ai réécrit dans vim, puis dans bluefish et rien n'y faisait. Bizarrement, j'ai essayé avec python2.7 (je testais avec 3.2) et cela a fonctionné. Je crois donc que c'était l'interpréteur python qui avec un quelconque problème. Problème résolu ! Merci à toi.

@fred1599 > Merci du renseignement, à l'avenir c'est ce que je vais utiliser.
Édité le 08/02/2012 à 14:30:19 par drivedric
 
Hors ligne fred1599 # Posté le 08/02/2012 à 15:04:17
Avatar

Une solution autre est d'utiliser round pour l'arrondi et laisser le choix à l'utilisateur du choix de la précision
Ensuite transformer ton nombre en string et remplacer le point par une virgule avec la méthode replace()

Code : Python
1
2
def show_float(number, precision):
    return str(round(number, precision)).replace('.', ',')


Ce qui devient plus pythonique, avec l'utilisation du try except

Code : Python
1
2
3
4
try:
    n_str = show_float(number, precision)
except TypeError:
    raise TypeError("Is not a number but type %s" %type(number))
Édité le 08/02/2012 à 15:25:42 par fred1599

Retour au forum "Langage Python" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx