Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les erreurs courantes en Python

Évitons de nous répéter

26 janvier 2014 à 18:30:14 - Message modéré pour le motif suivant : Aucun effort sur l'orthographe


26 janvier 2014 à 18:41:41

Bonjour,

Ta façon d'écrire est rebutante, fais un effort !

De plus, le message d'erreur est assez clair non ?

Il faut que tu indentes ton print().

  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2014 à 19:21:46

oups refais le même message dsl

merci

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 janvier 2014 à 20:29:48

Merci de lire en entier, page 1 se trouve déjà la solution à cette erreur...

  • Partager sur Facebook
  • Partager sur Twitter
9 février 2014 à 18:06:21

ValueError

Exemple

print(int("abc"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'

Pourquoi cette erreur ?

Parce que l'on essaye de transformer en int une chaine de caractères, ce qui est une erreur !

Comment l'éviter ?

Le seul moyen de l'éviter, c'est d'éviter de transformer en int une chaine de caractères,

ou utiliser le bloc "try-except":

try:
    print(int("abc"))
except ValueError:
    print("Exception !")
  • Partager sur Facebook
  • Partager sur Twitter
The power of computer
Anonyme
9 février 2014 à 18:21:53

@elie_elie5000

Merci de ton implication...

"Parce que l'on essaye de transformer en int une chaine de caractères, ce qui est une erreur !"

Non ce n'est pas une erreur, c'est voulu, d'où l'utilisation des blocs try-except pour gérer les exceptions.

while True:
    try:
        age = int(input("Quel âge as-tu? "))
        break # On quitte la boucle
    except ValueError:
        continue # On redémarre la boucle

"Le seul moyen de l'éviter, c'est d'éviter de transformer en int une chaine de caractères,"

Je ne vois pas dans mon exemple ci-dessus comment tu peux éviter cela ;)

Imaginons que j'ai besoin de calculer l'année de naissance, faut bien faire un calcul et pour cela j'ai besoin d'un entier, non?

Bonne continuation...

;)

  • Partager sur Facebook
  • Partager sur Twitter
10 février 2014 à 10:36:38

Bonjour,

NameError: name 'Tk' is not defined

la solution que je veux vous présenter n'est pas forcément la bonne solution: simplement je l'ai vu pas mal de fois dans ce forum. Vous allez comprendre:

from tkinter import *
  File "tkinter.py", line 8, in <module>
    fenetre = Tk()
NameError: name 'Tk' is not defined


Voilà; le fichier s'appelle tkinter.py.

Quand on fait

from tkinter import *

 il faut s'assurer que le fichier ne s'appelle pas lui-même tkinter.py, sinon le fichier va s'importer lui-même et évidement le script ne va pas marcher.

Si je n'ai pas été clair, n'hésitez pas à me le signaler.

  • Partager sur Facebook
  • Partager sur Twitter
Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
10 février 2014 à 18:30:09

fred1599 a écrit:

@elie_elie5000

Merci de ton implication...

"Parce que l'on essaye de transformer en int une chaine de caractères, ce qui est une erreur !"

Non ce n'est pas une erreur, c'est voulu, d'où l'utilisation des blocs try-except pour gérer les exceptions.

while True:
    try:
        age = int(input("Quel âge as-tu? "))
        break # On quitte la boucle
    except ValueError:
        continue # On redémarre la boucle

"Le seul moyen de l'éviter, c'est d'éviter de transformer en int une chaine de caractères,"

Je ne vois pas dans mon exemple ci-dessus comment tu peux éviter cela ;)

Imaginons que j'ai besoin de calculer l'année de naissance, faut bien faire un calcul et pour cela j'ai besoin d'un entier, non?

Bonne continuation...

;)


Oui, je suis désolé, je me rattrape : il ne faut pas transformer une chaine de caractères qui ne peut pas être un int
  • Partager sur Facebook
  • Partager sur Twitter
The power of computer
24 mai 2014 à 12:56:38

@fred1599 : pourquoi ne pas utiliser l'instruction else ? Ça permet de séparer clairement les instructions à tester de ce qu'il faut faire si ça marche ou si ça ne marche pas.

while True:
    try:
        age = int(input("Quel âge as-tu ? "))
    except ValueError:
        continue
    else:
        break
  • Partager sur Facebook
  • Partager sur Twitter
24 mai 2014 à 15:24:21

SyntaxError: invalid syntax

Exemple de code problématique

a = ([1, 2, 3, 4, 5], [6, 7, 8, 9, 0]
b = 37

L'erreur retournée est: 

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 2
    b = 37
    ^
SyntaxError: invalid syntax

D'où vient cette erreur:

C'est l'une des erreurs les plus vicieuses. L'erreur n'est pas à la ligne mentionnée, mais avant. Elle survient quand vous avez oublié de fermer des parenthèses, crochets ou accolades.


Le réflexe à avoir:

Ne balancez pas immédiatement votre ordi par la fenêtre. Si la ligne présentée par l'erreur vous semble correct, c'est juste que vous avez oublié de fermer quelques lignes avant une paire de parenthèses/crochets/accolades.

-
Edité par Olygrim 24 mai 2014 à 15:28:58

  • Partager sur Facebook
  • Partager sur Twitter
Précepte: Le mieux est l'ennemi du bien
Anonyme
24 mai 2014 à 18:44:01

"@fred1599 : pourquoi ne pas utiliser l'instruction else ?"

Pourquoi pas ?

"Ça permet de séparer clairement les instructions à tester de ce qu'il faut faire si ça marche ou si ça ne marche pas."

Mon code n'est pas clair ? Ah bon... Je trouve pourtant sémantiquement très lisible, peut-être ai-je trop l'habitude, je ne vois plus ce qui est lisible ou non pour un débutant.

  • Partager sur Facebook
  • Partager sur Twitter
24 mai 2014 à 19:59:12

Ton code est clair et tout à fait lisible. La remarque valait surtout pour des blocs try/except plus complexes où d'autres instructions dans le try peuvent potentiellement lever des exceptions (ce qui n'est pas le cas ici), et où le code à exécuter après l'instruction à tester est long (auquel cas ça permet de conserver le traitement des erreurs au plus près du code qui la génère).

  • Partager sur Facebook
  • Partager sur Twitter
30 mai 2014 à 2:25:15 - Message modéré pour le motif suivant : Message complètement hors sujet


25 octobre 2014 à 12:02:51

Hello, petit soucis d'index pour moi :( ..

l = input("Entrez une largeur de tableau : ")
print("{} ".format(l))
tab = []
bat = []
print("Tableau 1")
for i in range(0,l) :
    temp = input("> ")
    tab.append(temp)
print("{}".format(tab))
print("Tableau 2")
for i in range(0,l) :
    temp = input("> ")
    bat.append(temp)
print("{}".format(bat))

listfusion = []
i1 = 0
i2 = 0
for j in range(0,l*2) :
    if tab[i1] < bat[i2] :
        listfusion.append(tab[i1])
        i1+=1
    else :
        listfusion.append(bat[i2])
        i2+=1
print("{}".format(listfusion))

Je tente de créer une fonction qui fusionne et trie 2 listes qui sont triés d'avance

Les erreurs :

Entrez une largeur de tableau : 5
5 
Tableau 1
> 1
> 2
> 3
> 4
> 5
[1, 2, 3, 4, 5]
Tableau 2
> 6
> 7
> 8
> 9
> 10
[6, 7, 8, 9, 10]

Traceback (most recent call last):
  File "C:\Users\clement\Documents\Programmation\Python\listfusion.py", line 28, in <module>
    if tab[i1] < bat[i2] :
IndexError: list index out of range



-
Edité par Darkvlaad 25 octobre 2014 à 12:09:40

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
25 octobre 2014 à 12:09:04

edit

-
Edité par Anonyme 25 octobre 2014 à 12:11:57

  • Partager sur Facebook
  • Partager sur Twitter
1 novembre 2014 à 13:18:35

Bonjour à tous :)

J'ai une erreur mais je ne la comprend pas.
J'ai une petite idée mais je ne suis pas sur : Je suis sous Mac, j'ai utilisé TextEdit pour écrire une première ligne "Voici le contenu de fichier"

J'ai ensuite enregistré ce fichier en .rtf que j'ai ensuite modifié en .txt

Est-ce possible que ce soit ça ?
En tout cas, voici l'erreur :

>>> mon_fichier = open ("fichier.txt", "w")
>>> mon_fichier.write ("Premier test d'écriture dans un fichier via Python")
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    mon_fichier.write ("Premier test d'écriture dans un fichier via Python")
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 15: ordinal not in range(128)
>>> 

 Merci :)

  • Partager sur Facebook
  • Partager sur Twitter
99% des problèmes informatiques se trouvent entre la chaise et l'écran
Anonyme
1 novembre 2014 à 14:04:41

faut qu'il soit des le debut en txt, sinon ton encodage n'est pas bon ! met ceci en haut de ton fichier : #-*-coding: Utf-8-*-

et essaye de faire with open("fichier.txt", "w") as fichier_ecrire: fichier_ecrire.write(u'TEXTE ICI') de maniere a mettre ton texte en unicode et non en ascii

ps: rtf utilise une syntaxe particuliere pour pouvoir avoir du gras, souligné et italique et bien d'autres mises en formes, ce que ne propose pas txt, en l'occurence, tout cela doit etre stocké dans rtf et donc des caractères spéciaux sont utilisés : ces caracteres nes sont pas dans la norme ascii

-
Edité par Anonyme 1 novembre 2014 à 15:26:28

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 novembre 2014 à 14:35:34

Outre le fait que ce n'est pas ici que l'on pose ses questions personnelles (il y a un forum pour ça), faudrait voir à ne pas dire trop de conneries non-plus. Le format RTF (RichTextFormat) n'a rien à faire dans l'édition d'un script TEXTE ! C'est un format pour le traitement de texte, pour écrire des documents avec une mise en page, des paragraphes, des listes à puce, des tableau, etc... Il faut utiliser un éditeur de texte pour éditer des scripts.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 novembre 2014 à 14:38:34

ben c'est ce que je dis, non ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 novembre 2014 à 14:42:12

Folaefolc a écrit:

ben c'est ce que je dis, non ?

Non, tu dis : faut qu'il soit des le debut en rtf

À part si le but est de présenter un code source dans un document, RTF n'a rien à faire avec l'édition/l'écriture de code source.

EDIT: Renseignez-vous sur ce que sont les éditeurs de textes (gedit par exemple) et les traitement de texte (Word par exemple), et leurs différences.

-
Edité par Anonyme 1 novembre 2014 à 14:45:06

  • Partager sur Facebook
  • Partager sur Twitter
1 novembre 2014 à 15:02:50

Merci à vous deux, j'ai réglé le problème en faisant : Format -> Importer -> Texte

Désolé si j'ai posté au mauvais endroit

  • Partager sur Facebook
  • Partager sur Twitter
99% des problèmes informatiques se trouvent entre la chaise et l'écran
Anonyme
1 novembre 2014 à 15:27:04

oh merde ! effectivement je me suis mélangé entre txt et rtf ><' mea culpa
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2014 à 16:52:09

Bonjour,

je suis nouveau sur python et je n'arrive pas à comprendre comment fonctionne le premier programme comment le lancer.

C'est celui des années bissextiles.

Est ce que chaque fois faut mettre la ligne avec >>>  ou es ce qu'il prend en compte les 3...

faut il que je mette une année ou faut il que je saute la ligne 

Ensuite pour le faire fonctionner comment dois je faire.

Merci bcp de votre à tous.

  • Partager sur Facebook
  • Partager sur Twitter
12 novembre 2014 à 10:02:53

Ce que tu dis ce n'est pas super compréhensible, donc je sais pas si je vais bien te répondre et tu n'as pas posté au bon endroit (comme moi plus haut)

Quand tu vois ">>>" c'est quand tu es dans l'interpréteur de Python et que ce dernier est prêt à recevoir des ordres.
Dans l'exemple des années bissextiles :

>>> type(annee)# On veut savoir de quel type est la variable année
<type 'str'> # La variable est de type str ("chaines de caractères")
>>> annee = int(annee)
>>> type(annee)
<type 'int'>
>>> print(annee)
2009
>>> # L'interpréteur permet de tester tes lignes une par une.

Pour faire exécuter ton programme, tu dois utilisé un logiciel comme Emacs sur Mac ou NotePad++ pour Windows pour écrire ton code dans un fichier puis l'exécuter avec Python Launcher.
Tu es peut-être aller un peu vite, reprend le cours doucement

Bon courage 

-
Edité par Tooty 12 novembre 2014 à 10:06:07

  • Partager sur Facebook
  • Partager sur Twitter
99% des problèmes informatiques se trouvent entre la chaise et l'écran
31 décembre 2014 à 11:31:30

Bonjour,

Je programme en Python3 sur mon PC et je transfère ensuite les programmes sur ma tablette Samsung Galaxy 3.

Mon programme fonctionne très bien sur mon PC mais chargé sur la tablette, il donne l'erreur suivante:

Errno 30 Read-only file system: "nomdemonfichier.txt".

Si je supprime ce qui a trait au fichier, le programme fonctionne.

j'ai alors écris un programme minimum tel que:

fichier= open('fichier.txt','a')

fichier.write('Ca va pas bien !')

fichier.close()

et, j'obtiens la même erreur.

J'en déduis que l'erreur est donc liée à ma tablette, mais je ne sais pas comment en sortir.
Pouvez vous m'aider SVP ?

Bien sincèrement

François Fleury 

  • Partager sur Facebook
  • Partager sur Twitter
9 février 2015 à 16:07:19

Bonjour,

Je suis entrain de faire le tuto python via l'ide pyscripter et j'ai une erreur "invalid syntax" sur le from x import y

import os
#from multiply import *
from 20150209_OCR_TP02_multiply import *

# test de la fonction table
table(3, 20)
tempo = input('Appuyer sur une touche pour continuer...')


 

Si je décommente la ligne avec juste multiply, ça passe (j'ai un fichier multiply)

Si je laisse en l'état (j'ai un fichier 20150209_OCR_TP02_multiply), je me fais jeter.

Est-ce que j'ai loupé une info sur les noms autorisés ? (chiffres, underscores) ou est-ce que je problème vient d'ailleurs (entre l'écran et la chaise généralement...)

Merci d'avance,

Julien

edit :

pour l'erreur au dessus, je suis pas familier, mais le user que tu utilises a-t'il les droits en lecture/ecriture ? Je suppose que tu as déjà vérifié mais...j'ai un contentieux avec les nunux et les droits. Je sais pas si ça se fait sur android mais les chmod peuvent etre une piste.

edit2 :

http://stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them

Il y aurait effectivement des restrictions sur les noms de modules.
Au pire, en version sale, ça donne :

#from multiply import *
#from 20150209_OCR_TP02_multiply import *

multiply = __import__('20150209_OCR_TP02_multiply')

Et la, ça passe...
 

-
Edité par JulienBERNAT 9 février 2015 à 16:50:19

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 février 2015 à 16:26:54

Bonjour, pouvez vous me dire comment remedier à ce problème :

Quand je veux lire le fichier données.txt ça me donne ça :

>>> with open('données.txt', 'rb') as fichier:

mon_depickler = pickle.Unpickler(fichier)

score_recupere = mon_depickler.load()

Traceback (most recent call last):

  File "<pyshell#64>", line 3, in <module>

    score_recupere = mon_depickler.load()

EOFError: Ran out of input

>>> 

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
28 février 2015 à 4:45:35

>>> with open('données.txt', 'rb') as fichier:

mon_depickler = pickle.Unpickler(fichier)

score_recupere = mon_depickler.load()

Traceback (most recent call last):

  File "<pyshell#64>", line 3, in <module>

    score_recupere = mon_depickler.load()

EOFError: Ran out of input

>>> 
  • Partager sur Facebook
  • Partager sur Twitter
28 février 2015 à 9:52:11

Ce n'est pas le sujet pour ça. Crée un nouveau sujet sur le forum. Personne ne répondra ici.

  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
Anonyme
28 février 2015 à 18:34:29

Moi le quand je mets elif: #Négatif, ca me dit:

>>> if a>0: #Positif

print("a est positif.")

    elif a<0: #Négatif

SyntaxError: unindent does not match any outer indentation level.

  • Partager sur Facebook
  • Partager sur Twitter