Heim >Backend-Entwicklung >Python-Tutorial >Einige häufige Fehler in Python
Häufige Fehler in Python:
0. Vergessen, Doppelpunkte
in if-, elif-, else-, for-, while-, class- und def-Anweisungen zu schreiben Das Vergessen, „
if spam == 42 print('Hello!')
“ hinzuzufügen, führt später zu: SyntaxError: ungültige Syntax
2. Falsche Einrückung verwenden
Python verwendet Einrückungen, um Codeblöcke zu unterscheiden, häufige falsche Verwendungen:
print('Hello!') print('Howdy!')
führt zu: IndentationError: unerwarteter Einzug. Jede Codezeile im selben Codeblock muss eine konsistente Einrückung beibehalten
if spam == 42: print('Hello!') print('Howdy!')
Ursache: IndentationError: unindent stimmt mit keiner äußeren Einrückungsebene überein. Nachdem der Codeblock beendet ist, kehrt die Einrückung zur ursprünglichen Position
if spam == 42: print('Hello!')
zurück, was zu Folgendem führt: IndentationError: erwarteter eingerückter Block, „:“ muss von Einrückung gefolgt werden
3. Die Variable ist nicht definiert
if spam == 42: print('Hello!')
Ergebnisse: NameError: Name 'Spam' ist nicht definiert
4. Beim Abrufen der Indexposition des Listenelements vergessen Sie, die len-Methode
Wenn Sie das Element über die Indexposition abrufen, vergessen Sie, die Len-Funktion zu verwenden, um die Länge der Liste abzurufen.spam = ['cat', 'dog', 'mouse'] for i in range(spam): print(spam[i])führt zu: TypeError: range() Integer-Endargument erwartet, Liste erhalten.
Der richtige Ansatz ist:
spam = ['cat', 'dog', 'mouse'] for i in range(len(spam)): print(spam[i])Natürlich ist die pythonischere Art, es zu schreiben, so Verwenden Sie enumerate
spam = ['cat', 'dog', 'mouse'] for i, item in enumerate(spam): print(i, item)5. Ändern Sie die Zeichenfolge String ist ein Sequenzobjekt, das das Abrufen von Elementen anhand des Index unterstützt, sich jedoch von Listenobjekten unterscheidet. Zeichenfolgen sind unveränderliche Objekte und unterstützen keine Änderung.
spam = 'I have a pet cat.' spam[13] = 'r' print(spam)führt zu: TypeError: 'str'-Objekt unterstützt keine ElementzuweisungDer richtige Ansatz sollte sein:
spam = 'I have a pet cat.' spam = spam[:13] + 'r' + spam[14:] print(spam)6. String- und Nicht-String-Verkettung
num_eggs = 12 print('I have ' + num_eggs + ' eggs.')Ursachen: TypeError: 'str'- und 'int'-Objekte können nicht verkettet werdenWenn Strings mit Nicht-Strings verbunden werden, müssen Nicht-String-Objekte in String-Typen umgewandelt werden
num_eggs = 12 print('I have ' + str(num_eggs) + ' eggs.')Oder verwenden Sie die formatierte Form der Zeichenfolge
num_eggs = 12 print('I have %s eggs.' % (num_eggs))7. Die Verwendung der falschen Indexposition
spam = ['cat', 'dog', 'mouse'] print(spam[3])führt zu: IndexError: Listenindex außerhalb des Bereichs des Listenobjekts Der Index beginnt bei 0 und auf das dritte Element sollte mit spam[2] zugegriffen werden8 Um einen nicht vorhandenen Schlüssel im Wörterbuch zu verwenden
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'} print('The name of my pet zebra is ' + spam['zebra']), um auf den Schlüssel im Wörterbuchobjekt zuzugreifen , Sie können [ ] verwenden, aber wenn der Schlüssel nicht vorhanden ist, führt dies zu Folgendem: KeyError: 'zebra'Der richtige Weg sollte die Verwendung der get-Methode sein
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'} print('The name of my pet zebra is ' + spam.get('zebra'))Wenn der Schlüssel ist nicht vorhanden, get gibt standardmäßig „Keine“ zurück
9. Die Verwendung von Schlüsselwörtern als Variablennamen
class = 'algebra'führt zu: SyntaxError: ungültige Syntax Die Verwendung von Schlüsselwörtern als Variablennamen ist nicht möglich in Python erlaubt. Python3 hat insgesamt 33 Schlüsselwörter.
>>> 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. Die lokale Variable in der Funktion wird vor der Zuweisung verwendet.
someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction()führt zu: UnboundLocalError: Lokale Variable 'someVar', auf die vor der Zuweisung verwiesen wirdWenn eine globale Variable vorhanden ist Funktion in der Funktion Wenn es eine Variable mit demselben Namen in der Domäne gibt, wird nach der Variablen in LEGB-Reihenfolge gesucht. Wenn eine Variable mit demselben Namen auch im lokalen Bereich innerhalb der Funktion definiert ist, wird nicht gesucht der äußere Geltungsbereich. Daher ist someVar in der Funktion myFunction definiert, sodass print(someVar) nicht mehr außerhalb danach sucht, aber der Variablen wurde beim Drucken kein Wert zugewiesen, sodass UnboundLocalError 11 angezeigt wird ., verwenden Sie Selbstinkrementierung „++“ und Selbstdekrementierung „--“
spam = 0 spam++Haha, es gibt keine Selbstinkrementierungs- und Selbstdekrementierungsoperatoren in Python, wenn Sie von C oder Java wechseln. Du solltest aufpassen. Sie können „+=" anstelle von „++" verwenden
spam = 0 spam += 112. Ein falscher Aufruf der Methode in der Klasse
class Foo: def method1(): print('m1') def method2(self): print("m2") a = Foo() a.method1()führt zu: TypeError: method1() benötigt 0 Positionsargumente, aber 1 wurde angegebenMethode1 ist eine Mitgliedsmethode der Klasse Foo. Der Aufruf von a.method1() entspricht dem Aufruf von Foo.method1(a), aber Methode1 akzeptiert keine Parameter. es wird also ein Fehler gemeldet. Die richtige Aufrufmethode sollte Foo.method1() sein. Weitere Informationen zu diesem Thema finden Sie in der Spalte
Das obige ist der detaillierte Inhalt vonEinige häufige Fehler in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!