Je n'ai plus peur des erreurs! Erreurs Python et leurs causes / solutions

L'une des choses que vous rencontrerez toujours lors de la ** programmation ** est ** l'erreur **. Quand j'ai lancé le programme, j'ai écrit si dur, j'ai eu une longue phrase en anglais que je ne comprenais pas! Je pense que beaucoup de gens sont frustrés parce que cette erreur ne peut pas être résolue. Dans cet article, je vais vous expliquer les causes des erreurs dans ** Python ** et comment les résoudre.

  1. SyntaxError Je pense que c'est la première erreur que la plupart des débutants en programmation rencontrent. Vérifions un par un. Cette erreur signifie littéralement "** erreur de syntaxe **", c'est-à-dire qu'il y a une erreur grammaticale. Si vous obtenez cette erreur, pensez que vous avez oublié d'ajouter la parenthèse fermante ) ou oubliez d'écrire les deux points : dans l'espace pleine largeur, l'instruction ʻif, l'instruction for et l'instruction while`. De là, je vais expliquer avec quelques exemples.

1.1. Fermez les parenthèses!

** S'il n'y a pas de parenthèse ** () ou si vous oubliez de le fermer, SyntaxError: unexpected EOF while parsing J'obtiens l'erreur.

Code qui donne une erreur

hello_world1.py


print("Hello, world!"
# SyntaxError: unexpected EOF while parsing

Dans ce code, j'ai oublié de fermer les parenthèses, donc j'obtiens l'erreur "** Il y a une fin inattendue de la phrase **". Fermez les parenthèses pour éliminer l'erreur.

Code modifié

hello_world2.py


print("Hello, world!")
# Hello, world!

1.2. Trouvez un espace caché pleine largeur!

Si ** l'espace pleine largeur ** est mélangé dans le code, SyntaxError: invalid character in identifier J'obtiens l'erreur.

Code qui donne une erreur

circle1.py


r = 2
pi = 3.14
# ^C'est difficile à comprendre, mais il y a un espace pleine largeur ici(Le soulignement rouge est affiché)
print(r ** 2 * 3.14)
# SyntaxError: invalid character in identifier

Les espaces pleine largeur sont difficiles à trouver, mais trouvons le nombre de lignes line (number) affiché dans l'erreur comme un indice et corrigeons-le.

Code modifié

circle2.py


r = 2
pi = 3.14
print(r ** 2 * 3.14)
# 12.56

1.3. Ajoutez deux points dans l'instruction if, for, while!

Si vous oubliez d'ajouter ** deux-points ** : à la fin des lignes telles que l'instruction ʻif, l'instruction for, l'instruction while, **SyntaxError: invalid syntax`** J'obtiens l'erreur.

Code qui donne une erreur

ten1.py


i = 10
if i == 10
	print("j'ai 10 ans")
else
	print("je n'ai pas 10 ans")
# SyntaxError: invalid syntax

La solution est d'ajouter un deux-points à la fin de chaque phrase «si», «sinon».

Code modifié

ten2.py


i = 10
if i == 10:
	print("j'ai 10 ans")
else:
	print("je n'ai pas 10 ans")
#j'ai 10 ans
  1. NameError C'est aussi une erreur fréquente. L'erreur est "** Variable appelée introuvable **". Assurez-vous que vous avez défini les variables que vous avez appelées et que vous ne les avez pas mal orthographiées.

2.1 Vérifiez le nom de la variable!

Si la variable appelée est indéfinie ou mal orthographiée, ** NameError: name'variable name 'n'est pas défini ** J'obtiens l'erreur.

Code qui donne une erreur

year1.py


year = 2020
print(Year)

print(month)
# NameError: name 'Year' is not defined

Faites attention à la distinction entre les minuscules et les majuscules. Puisque le programme est exécuté à partir du dessus, il n'est pas mentionné que la variable «mois» n'est pas définie, mais cela provoque également une erreur.

Code modifié

year2.py


year = 2020
print(year)
# 2020
month = 3
print(month)
# 3
  1. TypeError Comme son nom l'indique, il s'agit de "** type error **". Cette erreur se produit lorsque vous essayez de calculer entre des valeurs de types différents ou de spécifier un type inapproprié pour l'argument d'une fonction. Utilisez str () ou ʻint () `pour convertir.

3.1 Vérifions la partie calcul!

Lors de l'exécution de calculs ou de la combinaison de chaînes de caractères par print () ou de l'assignation à des variables, le type de chaîne de caractères str et le type numérique int ne peuvent pas être utilisés en même temps, et si vous essayez de les utiliser ** TypeError: Impossible de convertir le'type 1'objet en (type 2) implicitement ** J'obtiens l'erreur.

Code qui donne une erreur

price1.py


price = 100
print("Ce produit est" + price + "C'est un cercle.")
# TypeError: Can't convert 'int' object to str implicitly

Puisque «100», qui est de type «int», est affecté à «prix», il ne peut pas être combiné avec le type «str». Dans ce cas, utilisez la fonction «str ()» pour convertir le type «price» en «str». De même, si vous voulez convertir le type str en type ʻint dans le calcul numérique, utilisez la fonction ʻint ().

Code modifié

price2.py


price = 100
print("Ce produit est" + str(price) + "C'est un cercle.")
#Ce produit est de 100 yens.

La même chose est vraie pour les arguments d'autres fonctions telles que len ().

  1. IndentationError L'erreur est "** Le retrait est incorrect **". Selon l'éditeur, ** indent ** peut être différent, par exemple 2 ou 4 espaces demi-largeur, et cette erreur peut se produire en raison de la différence. Une autre chose qui se produit est que l'indentation est abaissée avec l'instruction ʻif et que ʻelse est traité.

4.1 Vérifiez le retrait!

S'il y a une erreur dans le retrait, IndentationError: unindent does not match any outer indentation level J'obtiens l'erreur. Il n'existe qu'une seule solution de contournement pour cette erreur. "** Vérifiez le retrait **". Vérifiez si la touche tab et deux espaces demi-largeur sont mélangés.

Code qui donne une erreur

nine1.py


number = 99999
if number % 9 == 0:
	print("nombre est un multiple de 9.")
    else:
      print("le nombre n'est pas divisible par 9.")
#   ^^Il y a deux espaces demi-largeur ici.
# IndentationError: unindent does not match any outer indentation level

Assurez-vous que vous avez un retrait. Aussi, sortons ʻelse`.

Code modifié

nine2.py


number = 99999
if number % 9 == 0:
    print("nombre est un multiple de 9.")
else:
    print("le nombre n'est pas divisible par 9.")
#nombre est un multiple de 9.
  1. IndexError Je le rencontre souvent avec des listes et des chaînes. L'erreur est "** Un numéro d'index inexistant est spécifié ". N'oubliez pas que " les numéros d'index commencent par" 0 "**".

5.1 Vérifiez le numéro d'index!

Lorsque vous spécifiez un élément de list ou str, si vous spécifiez un numéro d'index qui n'existe pas ** ʻIndexError: (type) index hors plage` ** J'obtiens l'erreur.

Code qui donne une erreur

abc1.py


l = ["a","b","c"]
print(l[3])
# IndexError: list index out of range

Le numéro d'index du troisième élément sera "2" au lieu de "3". Notez que le numéro d'index du premier élément est «0». L'élément le plus à droite peut également être spécifié avec «-1».

Code modifié

abc2.py


l = ["a","b","c"]
print(l[2])
# c
  1. ImportError Il s'agit d'une erreur qui se produit lors de la tentative d'importation d'un module ou d'un objet qui n'existe pas lors de l'importation d'une ** bibliothèque standard ** ou ** package **. Vérifiez les fautes d'orthographe.

6.1 Vérifiez le nom du module!

Si vous appelez un module qui n'existe pas (ou l'objet spécifié par from import), ʻImportError: Aucun module nommé'specified module'` J'obtiens l'erreur.

Code qui donne une erreur

math1.py


import maths
print(maths.sqrt(2))
# ImportError: No module named 'maths'

Le module maths n'existe pas. Réécrivons-le comme math.

Code modifié

math2.py


import math
print(math.sqrt(2))
# 1.4142135623730951

★ Ajout

Quand j'ai exécuté le «code d'erreur» dans l'environnement «Python 3.8.2», ModuleNotFoundError: No module named 'maths' Est affiché comme une erreur. L'erreur ci-dessus a été affichée dans Python3.4.3, donc elle peut être différente selon la version, mais je ne pense pas qu'il y ait de problème particulier.

Recommended Posts

Je n'ai plus peur des erreurs! Erreurs Python et leurs causes / solutions
[Python] Erreur de type: résumé des causes et des solutions pour "Aucun type"
Le websocket de toio (nodejs) et python / websocket ne se connecte pas.
[Astuces] Problèmes et solutions dans le développement de python + kivy
Installation source et installation de Python
Je pense étudier Python
(Une des solutions) lorsque l'installation de pyenv sur macOS provoque BUILD FAILED et l'installation de Python échoue.
Construction d'environnement de python et opencv
L'histoire de Python et l'histoire de NaN
Installer SciPy et matplotlib (Python)
Ceci et cela des propriétés python
Coexistence de Python2 et 3 avec CircleCI (1.0)
Résumé des index et des tranches Python
Réputation des livres Python et des livres de référence