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

Quelques erreurs courantes en python

Libérer: 2020-06-16 15:53:11
avant
3082 Les gens l'ont consulté

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!')
Copier après la connexion

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!')
Copier après la connexion

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!')
Copier après la connexion

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!')
Copier après la connexion

, 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!')
Copier après la connexion

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])
Copier après la connexion

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])
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

6. >

num_eggs = 12
print('I have ' + num_eggs + ' eggs.')
Copier après la connexion

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.')
Copier après la connexion

Ou utilisez la forme formatée de chaîne

num_eggs = 12
print('I have %s eggs.' % (num_eggs))
Copier après la connexion

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

spam = ['cat', 'dog', 'mouse']
print(spam[3])
Copier après la connexion

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'])
Copier après la connexion

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'))
Copier après la connexion

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'
Copier après la connexion

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']
Copier après la connexion

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

someVar = 42

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

myFunction()
Copier après la connexion

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++
Copier après la connexion

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
Copier après la connexion

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()
Copier après la connexion
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!

Étiquettes associées:
source:juejin.im
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal