Erreur incompréhensible
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Erreur incompréhensible



  1. #1
    bergignon

    Erreur incompréhensible


    ------

    Bonjour, j'ai ce programme qui génère des emails :

    Code:
    import string
    import random
    
    
    
    def generator():
        email = [
        "@yahoo.com",
       "@hotmail.com",
        "@videotron.ca",
        "@gmail.com",
        "@icloud.com",
            ]
        nb = input("Entrez le nombre de comptes que vous souhaitez générer : ")
        for i in range(nb):
            username = "user" + "".join(random.choice(string.digits) for i in range(5)
            adresse = random.choice(email)
            password = " mot de passe : " + "".join(random.choice(string.printable) for i in range(8)
            compte = "adresse email : " + (username + adresse) + password
    
            return compte
    Tout cela je l'ai fait sur Visual Studio. Quand je le fais debugger, il me marque :

    invalidsyntax (<unknown>*, line17) pylint(syntax-error) [17, 1]

    Une des choses que j'ai remarqué, c'Est que username est blanc sur VS, contrairement à password, compte et adresse, qui sont bleus. Je savais pas ce que ça voulait dire, donc j'ai tenté de le faire sur IDLE, mais j'ai encore cette erreur, qui visiblement, se répète à la fois sur password et compte.

    Bref merci pour votre aide, je suis perdu.

    -----
    Si la vie est à la mort, à quoi est la mort ?

  2. #2
    polo974

    Re : Erreur incompréhensible

    souvent, c'est un problème de parenthèses ou autres bidules ((),{},[],"",'',...) mal balancés sur la ligne précédente...

    c'est la cas ici...
    Jusqu'ici tout va bien...

  3. #3
    Fustigator

    Re : Erreur incompréhensible

    Bonjour

    Je ne connais pas ce langage(*) mais manifestement la virgule après "@icloud.com" et avant le "]" n'a rien à faire là; de plus, il y a un problème de matching de parenthèses dans cette ligne :

    Code:
    password = " mot de passe : " + "".join(random.choice(string.printable) for i in range(8)
    (*) : Il serait bien que pour les demandes sur cette partie du forum IT les PO mettent le langage systématiquement dans le titre.
    Dernière modification par Fustigator ; 20/02/2019 à 07h27.

  4. #4
    pm42

    Re : Erreur incompréhensible

    Sur
    join(random.choice(string.digi ts
    il manque une parenthèse fermante.

    Et pour utiliser les "for-comprehension", il faut mettre des [ ] autour...
    Syntaxe de base du langage...

  5. A voir en vidéo sur Futura
  6. #5
    PA5CAL

    Re : Erreur incompréhensible

    Citation Envoyé par Fustigator Voir le message
    Je ne connais pas ce langage(*) mais manifestement la virgule après "@icloud.com" et avant le "]" n'a rien à faire là;
    En fait, de nombreux langages (C/C++, Python, Javascript, etc.) acceptent que le dernier élément d'un tableau ou d'une liste soit suivi d'une virgule.

    Citation Envoyé par Fustigator Voir le message
    (*) : Il serait bien que pour les demandes sur cette partie du forum IT les PO mettent le langage systématiquement dans le titre.
    En effet, ce serait bien. Mais hélas, j'ai des doutes quant au fait qu'une telle recommandation soit mieux suivie que les autres...


    Pour en revenir à l'erreur, le compilateur ou l'interpréteur s'arrête à l'endroit où il en détecte une. Soit il arrive à déterminer précisément la raison de cette erreur et il désigne l'élément qui en est la cause, soit il désigne l'endroit où le code qu'on lui soumet commence à perdre son sens. Comme le code est examiné dans l'ordre naturel de lecture, dans ce dernier cas le problème se situe en principe un peu avant l'endroit désigné. Pour comprendre l'erreur, il suffit donc d'essayer d'interpréter bêtement, comme il le ferait, la ou les dernières lignes de code précédant le point où il a relevé l'erreur. En l'occurrence, comme on l'a déjà indiqué ci-dessus, le problème provient d'une parenthèse qui n'a pas été refermée à la ligne 16.

  7. #6
    Fustigator

    Re : Erreur incompréhensible

    Citation Envoyé par PA5CAL Voir le message
    En fait, de nombreux langages (C/C++, Python, Javascript, etc.) acceptent que le dernier élément d'un tableau ou d'une liste soit suivi d'une virgule.
    En effet; je viens de faire le test en C# et les déclarations suivantes passent :

    Code:
             
    var mytest = new MyTest() { Prop1 = 1, Prop2 = 2, };
    var myArray = new int[] { 1, 2, 3, };
    je ne m'étais jamais posé la question ....


    En effet, ce serait bien. Mais hélas, j'ai des doutes quant au fait qu'une telle recommandation soit mieux suivie que les autres...
    Comme pour le forum "Dépannage" où il y a les choix "Brun", "Blanc", "Autre", ça pourrait être prévu sous la forme d'un choix à la création du sujet.

  8. #7
    pm42

    Re : Erreur incompréhensible

    Dans le cas présent, on est en python et il accepte la virgule supplémentaire. Il y a assez d'erreur comme ça dans le code pour ne pas lui reprocher un truc correct

  9. #8
    bergignon

    Re : Erreur incompréhensible

    Ok merci beaucoup

  10. #9
    polo974

    Re : Erreur incompréhensible

    Citation Envoyé par pm42 Voir le message
    Sur
    il manque une parenthèse fermante.
    oui
    Et pour utiliser les "for-comprehension", il faut mettre des [ ] autour...
    Syntaxe de base du langage...
    non, pas besoin ici:

    en python2 comme en python3:

    Code:
    >>> import string
    >>> import random
    >>> "".join(random.choice(string.digits) for i in range(5))
    '23797'
    car on a affaire à un générateur:
    Code:
    >>> (random.choice(string.digits) for i in range(5))
    <generator object <genexpr> at 0x7fc24c9fa048>
    Jusqu'ici tout va bien...

  11. #10
    pm42

    Re : Erreur incompréhensible

    Citation Envoyé par polo974 Voir le message
    non, pas besoin ici:
    Cela doit être pour ça que Python me dit "SyntaxError: invalid syntax" si on ne met pas les accolades (ou des parenthèses, ou list, ou...)
    Dans le code que tu donnes en exemple, tu as d'ailleurs mis des parenthèses...
    Dernière modification par pm42 ; 21/02/2019 à 09h38.

  12. #11
    polo974

    Re : Erreur incompréhensible

    Citation Envoyé par pm42 Voir le message
    Cela doit être pour ça que Python me dit "SyntaxError: invalid syntax" si on ne met pas les accolades (ou des parenthèses, ou list, ou...)
    Dans le code que tu donnes en exemple, tu as d'ailleurs mis des parenthèses...
    Oui, des parenthèses, pas des crochets. Ils ne sont pas nécessaires quand le bloc en question est en paramètre unique d'une fonction.
    Le code de bergignon faisait appel à une fonction (dont la parenthèse fermante avait été oubliée), donc ne nécessite pas de crochets.

    Python n'est pas très net avec les parenthèses:
    quand l'expression est "à poil", il y a erreur, mais quand on ajoute des parenthèses sans fonction devant, on se retrouve avec un générateur, et c'est pareil si on met la chose en paramètre unique d'une fonction:
    Code:
    >>> # sans rien, ça plante
    >>> random.choice(string.digits) for i in range(5)
      File "<stdin>", line 1
        random.choice(string.digits) for i in range(5)
                                       ^
    SyntaxError: invalid syntax
    
    >>> # avec des parenthèses, on obtient un générateur
    >>> (random.choice(string.digits) for i in range(5))
    <generator object <genexpr> at 0x7f44a0c33e60>
    
    >>> # en paramètre unique d'une fonction aussi...
    >>> type(random.choice(string.digits) for i in range(5))
    <type 'generator'>
    >>>
    Par contre (en continuant sur le thème des parenthèses), python a du mal à se retrouver avec les tuples (délimité par des parenthèses):
    Code:
    >>> type((1, 2))
    <type 'tuple'>
    >>>
    >>> type((1))
    <type 'int'>
    >>> # oups, ce n'est pas un tuple, car il n'y a pas de virgule dedans...
    
    >>> type((1,))
    <type 'tuple'>
    >>> # ahhh, là c'est mieux, autant toujours mettre cette dernière virgule...
    
    >>> type((1, 2,))
    <type 'tuple'>
    >>>
    D'où l'intérêt de mettre une virgule en bout de liste, tuple, dico, ce qui permet d'avoir la dernière ligne (ou élément) comme les autres (cf le code de bergignon): on peut ajouter/déplacer/supprimer sans avoir à gérer cette dernière virgule parfois obligatoire, jamais dérangeante...
    Jusqu'ici tout va bien...

  13. #12
    pm42

    Re : Erreur incompréhensible

    Citation Envoyé par polo974 Voir le message
    Le code de bergignon faisait appel à une fonction (dont la parenthèse fermante avait été oubliée), donc ne nécessite pas de crochets.
    Non, c'est une autre erreur : il y a oublié la parenthèse fermante d'une fonction appelée dans sa for-comprehension et il faut la rajouter. Mais ensuite, cela ne marche toujours pas.

    Le code est :
    Code:
    username = "user" + "".join(random.choice(string.digits) for i in range(5)
    et
    Code:
    password = " mot de passe : " + "".join(random.choice(string.printable) for i in range(8)
    Dans les 2 cas, ce n'est pas appelé dans une fonction, c'est une simple affectation à une variable et il suffit de le mettre dans un interpréteur pour se rendre compte qu'il ne passe pas en Python 3 et en Python 2 (après adaptation).

    C'est pourtant une règle de base : plutôt que de discourir sur la théorie, essayer de faire tourner le programme...

  14. #13
    pm42

    Re : Erreur incompréhensible

    Ok, j'ai relu le code et effectivement, c'est toi qui a raison sur l'appel de fonction.

    Toutes mes excuses.

Discussions similaires

  1. Exo incompréhensible
    Par aurelienfuture dans le forum Chimie
    Réponses: 25
    Dernier message: 09/11/2016, 16h45
  2. Erreur de raisonnement, erreur logique ou erreur tout court?
    Par babybirdhitz dans le forum Epistémologie et Logique (archives)
    Réponses: 7
    Dernier message: 03/02/2010, 12h32
  3. 9 box incompréhensible !!
    Par inviteba61ab7d dans le forum Internet - Réseau - Sécurité générale
    Réponses: 8
    Dernier message: 15/05/2006, 21h45
  4. Erreur en VBA incompréhensible !!!
    Par invite588da7a7 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 24/07/2004, 17h08