Maison >développement back-end >Tutoriel Python >Quelques erreurs courantes en python

Quelques erreurs courantes en python

尚
avant
2020-06-16 15:53:113048parcourir

Quelques erreurs courantes en python

Erreurs courantes en python :

0. Oublier d'écrire les deux-points

dans les instructions if, elif, else, for, while, class, def. Oublier d'ajouter ":"

if spam == 42
    print('Hello!')

plus tard conduit à : SyntaxError : syntaxe invalide

2 Utiliser une mauvaise indentation

Python utilise l'indentation pour distinguer les blocs de code, utilisations incorrectes courantes :

print('Hello!')
    print('Howdy!')

donne : IndentationError : retrait inattendu. Chaque ligne de code dans le même bloc de code doit conserver une indentation cohérente

if spam == 42:
    print('Hello!')
  print('Howdy!')

Cause : IndentationError : unindent ne correspond à aucun niveau d'indentation externe. Une fois le bloc de code terminé, l'indentation revient à la position d'origine

if spam == 42:
print('Hello!')

, ce qui donne : IndentationError : un bloc indenté est attendu, ":" doit être suivi d'une indentation

3. La variable est non défini

if spam == 42:
    print('Hello!')

Résultats en : NameError : le nom 'spam' n'est pas défini

4 Lorsque vous obtenez la position d'index de l'élément de liste, vous oubliez d'appeler la méthode len

Lorsque vous obtenez l'élément via la position d'index, vous oubliez d'utiliser la fonction len pour l'obtenir. La longueur de la liste.

spam = ['cat', 'dog', 'mouse']
for i in range(spam):
    print(spam[i])

donne : TypeError: range() argument de fin entier attendu, liste obtenue.
L'approche correcte est :

spam = ['cat', 'dog', 'mouse']
for i in range(len(spam)):
    print(spam[i])

Bien sûr, la manière la plus pythonique de l'écrire est de utilisez enumerate

spam = ['cat', 'dog', 'mouse']
for i, item in enumerate(spam):
    print(i, item)

5. Modifiez la chaîne

String est un objet séquence qui prend en charge l'obtention d'éléments par index, mais il est différent des objets liste.

spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)

donne : TypeError : l'objet 'str' ne prend pas en charge l'affectation d'éléments

L'approche correcte devrait être :

spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)

6. >

num_eggs = 12
print('I have ' + num_eggs + ' eggs.')

Causes : TypeError : impossible de concaténer les objets 'str' et 'int'

Lorsque des chaînes sont connectées à des non-chaînes, les objets non-chaînes doivent être contraints en types de chaîne

num_eggs = 12
print('I have ' + str(num_eggs) + ' eggs.')

Ou utilisez la forme formatée de chaîne

num_eggs = 12
print('I have %s eggs.' % (num_eggs))

7. L'utilisation d'une mauvaise position d'index

spam = ['cat', 'dog', 'mouse']
print(spam[3])

entraîne : IndexError : index de liste hors plage

de l'objet liste. l'index commence à 0 et le troisième élément doit être accessible via spam[2]

8 Pour utiliser une clé inexistante dans le dictionnaire

spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])

pour accéder à la clé dans l'objet dictionnaire. , vous pouvez utiliser [ ], mais si la clé n'existe pas, cela entraînera : KeyError: 'zebra'

La bonne méthode devrait être d'utiliser la méthode get

spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam.get('zebra'))

Quand le la clé n'existe pas, get renvoie Aucun par défaut

9. L'utilisation de mots-clés comme noms de variables

class = 'algebra'

donne : SyntaxError : syntaxe invalide

L'utilisation de mots-clés comme noms de variables n'est pas possible. autorisé en Python. Python3 a un total de 33 mots-clés.

>>> import keyword
>>> print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

10. La variable locale dans la fonction est utilisée avant l'affectation

someVar = 42

def myFunction():
    print(someVar)
    someVar = 100

myFunction()

conduit à : UnboundLocalError : variable locale 'someVar' référencée avant l'affectation

Lorsqu'il y a une variable globale fonction dans la fonction Lorsqu'il y a une variable du même nom dans la portée, elle recherchera la variable dans l'ordre LEGB. Si une variable du même nom est également définie dans la portée locale à l'intérieur de la fonction, elle ne recherchera pas dans la fonction. le périmètre externe.

Par conséquent, someVar est défini dans la fonction myFunction, donc print(someVar) ne la recherche plus à l'extérieur, mais la variable n'a pas reçu de valeur lors de l'impression, donc UnboundLocalError

11 apparaît . , utilisez l'auto-incrémentation "++" et l'auto-décrémentation "--"

spam = 0
spam++

Haha, il n'y a pas d'opérateurs d'auto-incrémentation et d'auto-décrémentation en Python. Si vous passez du C ou de Java, tu devrais faire attention. Vous pouvez utiliser "+=" au lieu de "++"

spam = 0
spam += 1

12. Un appel incorrect de la méthode dans la classe

class Foo:
    def method1():
        print('m1')
    def method2(self):
        print("m2")

a = Foo()
a.method1()

entraîne : TypeError : method1() prend 0 argument de position mais 1. a été donné

method1 est une méthode membre de la classe Foo. Cette méthode n'accepte aucun paramètre. Appeler a.method1() équivaut à appeler Foo.method1(a), mais method1 n'accepte aucun paramètre. , donc une erreur est signalée. La méthode d'appel correcte doit être Foo.method1().

Pour plus de connaissances connexes, veuillez prêter attention à la colonne

tutoriel vidéo Python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer