IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

[Lien]erreur dans mon programme python [Fait]


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut [Lien]erreur dans mon programme python
    Bonjour,

    j'ai attaqué mon premier programme en python et voila mon souci :
    lorsque j'ouvre mon programme et que je l'exécute à partir du code il fonctionne correctement et l 'IDLE ne m'indique aucune erreur. Mais lorsque je veux exécuter mon programme directement à partir du fichier contenant mon code (cad le .py) il m'envoie l'erreur suivante dans une fenetre dos :

    sys:1: DeprecationWarning: non-ASCII character in file C:\\ " mon fichier contenant mon code" on line 10, but not encoding declared; see http://www.python.org/peps-0263.html for details.

    je suis aller voir sur le site indiquer, j'ai pas tout compris ne maitrisant pas trop l'anglais. Si vous avez déjà rencontré ce problème ou savez de quoi il s'agit ca serait sympa que vous me donniez un coup de main.

    Merci d'avance.

  2. #2
    Membre habitué Avatar de Driden
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 166
    Points
    166
    Par défaut
    T'as pas mis des caractères spéciaux ou avec des accents dans ton code :

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    En effet, j'avais des accents dans certains lebellés.

    Mais autre problème, maintenant il ne s'exécute toujours pas et la fenetre dos qui indique l'erreur se referme immédiatement ne laissant pas le temps de lire. Pourtant l'interprèteur ne m'indique aucune erreur lorsque j'exécute le prg depuis mon code. Une idée d'où ca peut venir ?


    En tout cas merci bien

  4. #4
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    As-tu une interface graphique (fenêtre, boutons) ? Ou est-ce que le code en question demande une action de l'utilisateur (style appuyer sur une touche par ex. ?).
    Parce que sinon, il se peut que ton programme s'exécute si rapidement que tu n'as pas le temps de le voir.
    Essaie de sauver ton programme avec l'extension .pyw si tu es sous windows cela permettra de lancer directement le script en double cliquant dessus.

    Pour les accents, c'est un problème d'IDLE qui se règle en faisant une modif dans le code d'IDLE (c'est un script Python).

    J'ai fait cette modif mais je ne l'ai plus en tête. je peux la retraouver, si besoin.

    Pour l'autre problème ce serait bien d'avoir le code s'il n'est pas confidentiel. 8)
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  5. #5
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Je me réponds à moi-même ( ) car j'ai (re)trouvé la réponse aux deux questions que je posais :

    1 - comment régler le pb des accents sous IDLE :

    Editer le fichier site.py (après avoir fait une sauvegarde) dans le repertoire Lib de Python.

    Changer le if 0 par if 1: dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    encoding = "ascii" # Default value set by _PyUnicode_Init()
     
    if 0: #tu remplaces 0 par 1
        # Enable to support locale aware default string encodings.
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    2 - En mode console, il est préférable de coder les caractères dans leur représentation héxadécimale, quelque soit la configuration de Python, les caractères s'afficheront correctement.

    Exemple :
    >>print "\x82\x83\x84\x85\x87\x88"
    éâäàçê

    j'ai pris toutes ces informations sur l'excellent forum Python en français à l'adresse suivante :

    http://artyprog.freezope.org

    L'animateur du forum est un super "pythonien" , il a réponse à tout, il est fort sympathique et très rapide. C'est un bon complément à ce forum-ci.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Voila mon code, il est long et vu sa qualité il n'a rien de confidentiel , il est pas achevé (c'est pour ca que l'aide n'est pas fini) je fais appel a des images (donc c'est normal si tu as des blancs) .
    J'ai fait ce que tu m'as dit dans le fichier site.py et il ne prend toujours pas les accents, j'ai aussi mis le fichier contenant le code en .pyw ca ne fonctionne pas .
    Je fais appel a une fenetre tkinter et l'utilisateur doit intervenir pour exécuter le prog.
    Voilà, si tu peux m'aider ca serait super merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    from Tkinter import *
    from math import *
    import Pmw
    from random import randrange
     
    def evaluer(event):
        "Calcul de moyenne"
        global substit, substit2, n, SEffectif, Moyenne 
     
        test=len(SaisieEff.get())
        test2=len(SaisieVal.get())
     
        if ((test==0)or(test2==0)):
            AffMoy.configure(text = "Entrez des valeurs")
        else:     
            substit =eval(SaisieEff.get())    #passe les donnees saisies sous forme de tableau d'entier
            substit2 = eval(SaisieVal.get())
     
            n=len(substit)    #calcul le nombre de case du tableau
            n2=len(substit2)
     
            i=0
            SEffectif=SValeur=0
     
            if ((n!=n2)or(n==0)or(n2==0)or(n==1)or(n2==1)):       #au cas ou il n'y a pas le meme nombre de valeur que d'effectif on renvoie erreur
                AffMoy.configure(text = "Erreur")
            else:
                while i<n:                           #Boucle calculant l'effectif total
                    SEffectif=SEffectif+substit[i]   
                    i=i+1
                i=0
                while i<n2:                         # boucle calculant la valeur * l'effectif
                    SValeur=SValeur+substit[i]*substit2[i]
                    i=i+1   
                Moyenne=float(SValeur/SEffectif)
                AffMoy.configure(text = "Moyenne = " + str(Moyenne))
     
    def Canevas():
        "Constructeur graphique : axes et echelle horizontale"
        global fenetre3
        test=len(SaisieEff.get())
        test1=len(SaisieVal.get())
        if ((test==0)or(test1==0)):
            AffMoy.configure(text = "Entrez les valeurs")
        else:
            fenetre3=Tk()
            fenetre3.title("Repere")
            substit =eval(SaisieEff.get())    #passe les donnees saisies sous forme de tableau d'entier
            substit2 = eval(SaisieVal.get())
     
            n=len(substit)    #calcul le nombre de case du tableau
            n2=len(substit2)
            Can=Canvas(fenetre3)         #variable contenant le canevas
            Can.configure(bg='ivory',bd=2, height=600,width=640, relief= SUNKEN)
            Can.create_line(0, 300, 640, 300, arrow=LAST) #Creatrion de l'axe des absisses
            Can.create_line(320, 600, 320, 5, arrow=LAST) #Creation de l'axe des ordonnees
            for t in range(1, 64): #boucle de graduation sur x
                stx = t*10
                Can.create_line(stx, 300-4, stx, 300+4) 
            stx=0
            for t in range(1, 60): #boucle de graduation sur y
               stx = 10 + t*10
               Can.create_line(324, stx, 316, stx)
            fenetre3.geometry("700x690")
            Can.pack() #affichage du canevas
            i=0
            buff, buff2=substit[i], substit2[i]  
            while i<n:             #boucle recherchant le plus grand nombre contenu dans le tableau des effectifs
                if (buff<substit[i]):
                    buff=substit[i]
                if (buff<substit2[i]):  #boucle recherchant le plus grand nombre contenu dans le tableau des valeurs
                    buff2=substit2[i]
                i=i+1
            a=b=10
            NbrMax=31
            global Expa
            Expa=0
            Expb=0
     
            while buff>NbrMax:      #Boucle permettant de calculer le coefficient qui sera applique sur les effectifs pour adapter l'echelle
                a=float(a)/10
                NbrMax=NbrMax*10
                Expa=Expa+1
     
            NbrMax=29
     
            while buff2>NbrMax:     #Boucle permettant de calculer le coefficient qui sera applique sur les valeurs pour adapter l'echelle
                b=float(b)/10
                NbrMax=NbrMax*10
                Expb=Expb+1
            i=0
     
            while i<n:   #Boucle creant les differents points du nuage
                Can.create_line(substit[i]*float(a)+316, 300-(substit2[i]*float(b)),substit[i]*float(a)+324 ,300-(substit2[i]*float(b)),fill='red', smooth=1) # horizontal
                Can.create_line(substit[i]*float(a)+320, 304-(substit2[i]*float(b)),substit[i]*float(a)+320, 296-(substit2[i]*float(b)),fill='red', smooth=1) # vertical
                i=i+1
            if (a==10):
                a=1
            else:    
                a=10**Expa
     
            if (b==10):
                b=1
            else:     
                b=10**Expb
     
     
            AffEchelleX = Label(fenetre3, text = "Sur l'axe des absisses (effectif), 1 unite = " + str(a))
            AffEchelleY = Label(fenetre3, text = "Sur l'axe des ordonnees (valeur), 1 unite = " + str(b))
     
            AffEchelleX.pack()
            AffEchelleY.pack()
     
            ButEcarType=Button(fenetre3, text = "Ecart-type", command=EcartType)    
            ButCorrLin=Button(fenetre3, text = "Correlation lineaire", command=CoeffCor)
     
            ButEcarType.pack(side = LEFT)
            ButCorrLin.pack(side = RIGHT)    
     
    def EcartType():
        "Calcul de l'ecart type"    
        Somme=i=0
     
        substit =eval(SaisieEff.get())    #passe les donnees saisies sous forme de tableau d'entier
        substit2 = eval(SaisieVal.get())
     
        n=len(substit)    #calcul le nombre de case du tableau
        n2=len(substit2)
     
     
        while i < n:
            Somme=Somme+substit[i]*(substit2[i]-Moyenne)**2
            i=i+1
     
        Variance=float(Somme/SEffectif)        
        Ecart=float(sqrt(Variance))    
     
        global AffEcarCoeff
     
        AffEcarCoeff=Label(fenetre3, text="Ecart-type = " + str(Ecart))
        AffEcarCoeff.pack()
     
    def CoeffCor():
        "Calcul le coefficient de correlation lineaire"
        MoyenneY=i=MoyenneX=0
        while i<n:          #boucle calculant les moyennes des champs effectifs et valeurs
            MoyenneX=MoyenneX+substit2[i]
            MoyenneY=MoyenneY+substit[i]
            i=i+1
     
        MoyenneX=float(MoyenneX/n)          
        MoyenneY=float(MoyenneY/n)      
        i=Covariance=0
        while i<n:      #boucle calculant la covariance entre les champs effectif et valeur
            Covariance=float(Covariance+(substit2[i]-MoyenneX)*(substit[i]-MoyenneY))
            i=i+1
        i=EcartY=EcartX=0
        while i<n:      #boucle calculant l'ecart type de effectif et de valeur
            EcartX=EcartX+(substit2[i]-MoyenneX)**2
            EcartY=EcartY+(substit[i]-MoyenneY)**2
            i=i+1
     
        EcartXY=sqrt(EcartX*EcartY)
        Coeff=float(Covariance/EcartXY)
     
        AffEcarCoeff=Label(fenetre3, text="r = " + str(Coeff))
        AffEcarCoeff.pack()
     
    def help():
        "Creation de la fenetre d'aide"
        fenetre2=Tk()
        fenetre2.title('Aide PythonStats')
        fenetre2.geometry('650x200')
     
        TitleAide=Label(fenetre2, text='Aide pour PythonStats', foreground='black', font='Arial 16')
        aide1=Label(fenetre2, text='Saisie des donnees', foreground='blue', font='arial 12')
        text1=Label(fenetre2, text="Les donnees doivent etre separees d'une virgule ',' . Lorsqu 'il y a des decimaux on utilise le point '.' (ex: 12.56). Pour obtenir la moyenne en reelle")
        text2=Label(fenetre2, text="vous devez rentrer au minimum une donnee en decimale,  il suffit de rajouter un point apres une donnee (ex: '12.')")
     
        aide2=Label(fenetre2, text='Statistiques a 2 variables', foreground='blue', font='arial 12')
     
        TitleAide.grid(row=0, column=0)
        aide1.grid(row=3, column =0)
        text1.grid(row=4, column=0)
        text2.grid(row=5, column=0)
     
        fenetre2.mainloop
     
    def OpenCours():
        file=open('Statistiques.pdf','r')
     
    #----------PROGRAMME PRINCIPAL-----------#
     
    fenetre = Tk() #Variable contenant l'objet Tk()
    fenetre.title('PythonStats')
    fenetre.geometry("200x163")
     
    photo=PhotoImage(file='ptinterrog.gif')
     
    photo2=PhotoImage(file='NuagePt.GIF')
    photo3=PhotoImage(file='cour.GIF')
    toolbar=Frame(bd=1)
     
    help=Button(toolbar, image=photo, command=help)
    Cours=Button(toolbar,image=photo3, command=OpenCours)
    tip=Pmw.Balloon()  #Utilise la fonction balloon de la classe Pmw   
     
    AffMoy = Label(fenetre)
     
    AffEffectif = Label(fenetre, text='Effectif :', foreground="blue")
    AffValeur = Label(fenetre, text='Valeur :', foreground="blue")
    bou=Button(fenetre,image=photo2, command=Canevas)
     
    SaisieEff = Entry(fenetre)
    SaisieVal = Entry(fenetre)
     
    tip.bind(help, "aide")  #affiche <<aide>> dans une bulle lorsque la souris passe sur le bouton "help"
    tip.bind(Cours, "Cours Statistiques et Probabilites")
    tip.bind(bou, "Dessine le nuage de point dans un repere")
     
     
    #Affectation de fonction evaluer lorsqu'on apuie sur entree a l'objet entree
    SaisieEff.bind("<Return>", evaluer)
    SaisieVal.bind("<Return>", evaluer)
     
    #Affichage des differentes objets de la fenetre
    toolbar.pack(expand=YES, fill=X)
    Cours.pack(side=LEFT)
    help.pack(side=LEFT)
     
     
    AffEffectif.pack()
    SaisieEff.pack()
    AffValeur.pack()
    SaisieVal.pack()
    AffMoy.pack()
    bou.pack()
     
    fenetre.mainloop

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    slaut,
    en fait pour que l'interpreteur reconnaisse certains caractères non ascii (qui est l'encodage par défaut) tu dois déclarer un autre encodage dans ton script. A la première ligne tu ajoutes ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    # -*- coding: utf-8 -*-
    Cette déclaration indique à l'interpréteur d'uitliser Unicode.
    bonne chance...salut

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Oui ca marche! avec cette ligne de code il prend les accents !

    Merci

    Mais il refuse toujours de s'exécuter depuis le fichier contenant le code !

    La fenetre dos qui s'ouvre me dit :
    Fatal python error : PyEval_RestoreThread: Null tstate


    et j'ai pas le temps de lire la suite, la fenetre se referme trop vite.

    Une idée ?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut,
    J'ai testé ton code et j'ai du rajouté des parenthèses à la méthode mainloop, à la fin, pour qu'il fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fenetre.mainloop()
    bye

  10. #10
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Oui , mainloop() est une fonction il faut donc toujours les parenthèses (dans lesquelles il peut y avoir des arguments). D'autre part, il est aussi préférable d'ajouter à la fin de ton programme :

    qui permettra de quitter proprement ta fenêtre.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Ca fonctionne correctement!! :o

    Merci à tous !!

    P.S.: Avec fenetre.destroy() ca ne fonctionne pas. :

  12. #12
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Dans ce cas, onpeut rajouter un bouton du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    quitte= Button(toolbar,text="QUITTER",command=fenetre.quit)
    Ou un truc du genre. ...
    Comme ça la sortie peut se faire par un bouton clairement identifié et une commande explicite.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Python erreur dans mon programme
    Par GuillaumeB. dans le forum Général Python
    Réponses: 6
    Dernier message: 01/12/2013, 14h21
  2. Erreur dans mon programme en Python
    Par florichoute dans le forum Général Python
    Réponses: 1
    Dernier message: 28/04/2009, 15h08
  3. Réponses: 1
    Dernier message: 18/04/2008, 04h33
  4. je ne trouve pas l'erreur dans mon programme
    Par Briska dans le forum Débuter
    Réponses: 19
    Dernier message: 04/04/2008, 09h21
  5. [Help] Erreurs dans mon programme
    Par Tacha dans le forum Langage
    Réponses: 13
    Dernier message: 02/10/2006, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo