Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Entwicklung Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

Als Programmierer werden Sie bei der Entwicklung von Software zwangsläufig auf Fehler stoßen. Dabei kann es sich um Fehler in Ihrer Logik handeln, die zu unerwarteten Ergebnissen führen, um Fehler, die sich aus der Verletzung der Regeln einer Programmiersprache ergeben, und sogar um Fehler, die bei der Ausführung Ihres Programms auftreten, neben vielen anderen. Diese Fehler werden gemeinhin als Bugs bezeichnet.

Bugs sind in jeder Programmiersprache allgegenwärtig, unabhängig davon, wie einfach die Sprache zu erlernen oder zu verwenden ist.

In Python zum Beispiel ist die Sprache zwar sehr gut lesbar, hat eine ausdrucksstarke Syntax und gilt im Vergleich zu anderen Programmiersprachen als relativ einfach zu erlernen und zu verwenden, aber dennoch sind Sie nicht vor Programmierfehlern gefeit, wenn Sie Python verwenden.

Da Fehler zwangsläufig auftreten, ist es eine gute Möglichkeit, mit ihnen umzugehen, indem Sie sich über die verschiedenen Arten von Fehlern informieren, die auftreten können und wie sie entstehen. So können Sie diese Fehler beim Programmieren vermeiden oder minimieren und wissen auch, wie Sie damit umgehen können, wenn sie auftreten.

Hier sind einige der üblichen Python-Fehler, die Ihnen bei der Programmierung mit dieser Sprache begegnen können:

SyntaxFehler

Ein Syntaxfehler ist ein Fehler, der auftritt, wenn Sie Code schreiben, der gegen die Regeln der verwendeten Programmiersprache verstößt. Das Ergebnis ist eine ungültige Codezeile.

In Python zum Beispiel muss eine Zeichenkette beim Ausdrucken zwischen Anführungszeichen gesetzt werden. Wenn Sie dies nicht tun, führt dies zu einem Syntaxfehler.

Ein Syntaxfehler kann auch auftreten, wenn Sie öffnende oder schließende Klammern, eckige Klammern oder geschweifte Klammern vermissen, Schlüsselwörter oder Funktionsnamen falsch schreiben, Doppelpunkte am Ende von Ablaufsteuerungsanweisungen vermissen oder wenn Sie erforderliche Operatoren in Ausdrücken vermissen.

Im Allgemeinen treten Syntaxfehler auf, wenn Sie gegen eine Regel verstoßen, wie Python-Code geschrieben werden sollte.

## Syntaxfehler aufgrund eines fehlenden Anführungszeichens
## um die zu druckende Zeichenkette
print("Hello World)

age = 20
## Syntaxfehler aufgrund eines fehlenden Doppelpunkts in einer if-Anweisung
if age > 18
 print("Alter ist über 18")

## Syntaxfehler, weil '(' nie geschlossen wurde
def square(x:
 return x * x
print(square(4))

Wenn Sie den obigen Code ausführen, erhalten Sie eine Fehlermeldung wie unten gezeigt:

Screenshot-from-2023-06-01-19-45-08

Die Fehlermeldung bei der Ausführung des Codes lautet wie folgt:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 1
 print("Hello World)
 ^
SyntaxError: unterminated string literal (detected at line 1)

Um diese Fehler zu beheben, verwenden Sie die richtige Python-Syntax wie unten gezeigt:

print("Hallo Welt")

age = 20
if age > 18:
 print("Alter ist über 18")

def square(x):
 return x * x
print(square(4))

EinrückungsFehler

Im Gegensatz zu anderen Sprachen wie Java, C oder C , die geschweifte Klammern verwenden, um Codeblöcke zu trennen, verwendet Python Einrückungen, um die Hierarchie und Struktur von Codeblöcken zu definieren. Wenn Sie beispielsweise in Java Kontrollanweisungen schreiben, befindet sich der gesamte Code, der ausgeführt werden soll, sobald die Bedingung ausgewertet wurde, innerhalb geschweifter Klammern.

In Python hingegen wird der Codeblock eingerückt. Eine typische Einrückung in Python besteht aus vier Leerzeichen oder einem Tabulator. Die Anzahl der Leerzeichen spielt jedoch keine Rolle, solange sie im gesamten geschriebenen Code konsistent bleibt.

Als Python-Programmierer werden Sie wahrscheinlich auf Einrückungsfehler stoßen, wenn Sie die erforderliche Einrückung nicht hinzufügen, z.B. beim Schreiben von Steueranweisungen oder Funktionen, wenn Sie sowohl Tabulatoren als auch Leerzeichen zur Erstellung von Einrückungen verwenden, da dies den Interpreter verwirrt, wenn Sie Einrückungen an der falschen Stelle setzen oder wenn Ihre Einrückungen in Ihrem gesamten Code nicht konsistent sind.

Ein Beispiel für Code, der zu einem Einrückungsfehler führt, sehen Sie unten:

age = 20
if age > 18:
print("Alter ist größer als 18")
 print("Du darfst fahren")
else:
 print("Alter ist kleiner als 18")

Die Fehlermeldungen, die sich aus dem obigen Code ergeben, werden unten angezeigt:

Screenshot-from-2023-06-04-11-21-59

Die Fehlermeldung bei der Ausführung des Codes lautet wie folgt:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 3
 print("Alter ist größer als 18")
 ^
IndentationError: expected an indented block after 'if' statement on line 2

Um die Fehler zu beheben, rücken Sie die Zeile nach der if-Anweisung ein, da eine Einrückung erforderlich ist, und stellen Sie sicher, dass sie mit der Einrückung im restlichen Code übereinstimmt, wie unten gezeigt:

age = 20
if age > 18:
 print("Alter ist größer als 18")
 print("Du darfst fahren")
else:
 print("Alter ist kleiner als 18")

TypeError

In Python ist ein TypeError eine Ausnahme, die auftritt, wenn Sie versuchen, eine Operation mit einem inkompatiblen Datentyp durchzuführen. Wenn Sie beispielsweise versuchen, eine Zeichenkette und eine Ganzzahl zu addieren oder einen Zeichenketten-Datentyp mit einer Ganzzahl zu verketten, tritt ein TypeError auf.

TypeErrors können auch auftreten, wenn Sie Funktionen oder Methoden mit falschen Datentypen verwenden, wenn Sie versuchen, einen nicht-ganzzahligen Index zu verwenden, um auf Elemente in einer iterierbaren Datei wie einer Liste zuzugreifen, oder wenn Sie versuchen, durch ein Objekt zu iterieren, das nicht iterierbar ist.

Im Allgemeinen führt jede Operation, die einen falschen Datentyp verwendet, zu einem TypeError.

Beispiele für Operationen, die zu TypeErrors führen können, finden Sie unten:

# Type Error resultierend aus der Verkettung eines Strings und einer Ganzzahl
age = 25
message = "Ich bin " age " Jahre alt."


list1 = [1, "hello", 5, "world", 18, 2021]
#TypeError resultierend aus der falschen Verwendung von builtin in Methoden
print(sum(list1))

#TypeError resultierend aus der Addition eines Strings und einer Ganzzahl
num1 = 10
num2 = "16"
print(num1 num2)

#TypeError resultierend aus der Verwendung eines nicht ganzzahligen Index
list2 = ["hello", "von", "der", "andere", "Seite"]
print(list2["1"])

Die Fehlermeldungen, die sich aus dem oben gezeigten Code ergeben, sind unten aufgeführt:

Screenshot-from-2023-06-04-11-57-37

Ein Beispiel für eine TypeError-Meldung aus dem Code ist unten zu sehen:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 3, in <module>
 message = "Ich bin " Alter " Jahre alt."
             ~~~~~~~~^~~~~
TypeError: kann nur str (nicht "int") mit str verketten

Um die Fehler zu beheben, verwenden Sie die korrekten Datentypen oder Typkonvertierungen wie unten gezeigt:

age = 25
message = "Ich bin " str(age) " Jahre alt."

list1 = [1, 5, 18, 2021]
print(sum(list1))

num1 = 10
num2 = "16"
print(num1 int(num2))

list2 = ["hallo", "von", "der", "andere", "Seite"]
print(list2[1])

AttributFehler

In Python tritt ein AttributeError auf, wenn Sie versuchen, ein Attribut zu verwenden, das auf dem Objekt nicht existiert oder eine Methode aufzurufen, die auf dem Objekt, auf dem sie aufgerufen wird, nicht existiert. Ein AttributeError zeigt an, dass ein Objekt nicht über ein Attribut oder eine Methode verfügt, die für das Objekt aufgerufen wird.

Wenn Sie z.B. eine String-Methode für eine Ganzzahl aufrufen, stoßen Sie auf einen AttributeError, weil die Methode für den Objekttyp, für den Sie sie aufrufen, nicht existiert.

In dem unten gezeigten Beispiel wird die Methode capitalize(), mit der der erste Buchstabe einer Zeichenkette in Großbuchstaben umgewandelt wird, für eine ganze Zahl aufgerufen. Das Ergebnis ist ein Attributfehler, da int nicht über die Methode capitalize() verfügt.

# AttributeError, der durch den Aufruf von capitalize() für einen int-Wert entsteht
num = 1445
cap = num.capitalize()
print(cap)

Wenn Sie diesen Code ausführen, erhalten Sie die unten gezeigte Fehlermeldung:

Screenshot-from-2023-06-08-10-04-12

Die AttributeError-Meldung des Codes lautet wie folgt:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 3, in <module>
 cap = num.capitalize()
 ^^^^^^^^^^^^^^
AttributeError: 'int' Objekt hat kein Attribut 'capitalize'

Um einen AttributeError zu lösen, stellen Sie sicher, dass die Methode oder das Attribut, das Sie aufrufen, für den Objekttyp existiert, für den Sie es aufrufen. In diesem Fall löst der Aufruf von capitalize() für einen String-Datentyp diesen Fehler wie unten gezeigt:

Screenshot-from-2023-06-08-10-07-36

ImportFehler

Der ImportError in Python tritt auf, wenn Sie versuchen, ein Modul zu importieren, das nicht gefunden werden kann oder auf das in Ihrer aktuellen Umgebung nicht zugegriffen werden kann. Es könnte sein, dass es noch nicht installiert ist, dass Sie den Pfad nicht richtig konfiguriert haben oder dass Sie das Modul, das Sie zu installieren versuchen, falsch geschrieben haben.

ImportError hat eine einzige untergeordnete Klasse namens ModuleNotFoundError, die den Fehler ausgibt, wenn Sie versuchen, ein Modul zu importieren, das nicht gefunden werden kann.

Der unten stehende Code, der versucht, die Datenanalysebibliothek pandas zu importieren, löst beispielsweise einen solchen Fehler aus, weil das Modul noch nicht installiert ist.

Screenshot-from-2023-06-09-10-46-17

Die erzeugte ImportError-Meldung ist unten dargestellt:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 1, in <module>
 import pandas
ModuleNotFoundError: Kein Modul namens 'pandas'

Um diesen Fehler zu beheben, stellen Sie sicher, dass die Module, die Sie zu importieren versuchen, installiert sind. Falls dies den Fehler nicht behebt, überprüfen Sie, ob Sie die richtige Schreibweise für das Modul und den richtigen Dateipfad für den Zugriff auf das Modul verwenden.

ValueError

Dies ist eine Ausnahme, die auftritt, wenn eine Funktion in Python einen Wert des korrekten Datentyps empfängt, der Wert aber ein unpassender Wert ist. Zum Beispiel gibt die Funktion Math.sqrt() , mit der Sie die Quadratwurzel aus numerischen Werten ermitteln können, einen ValueError zurück, wenn Sie eine negative Zahl übergeben.

Der Wert ist zwar vom richtigen Typ, d.h. ein numerischer Wert, aber da er negativ ist, ist er für die Funktion nicht geeignet

Die Funktion int(), die eine Zahl oder einen String konvertiert, gibt einen ValueError zurück, wenn Sie einen String übergeben, der kein numerischer String-Wert ist. Die Übergabe von “123” oder “45” an die Funktion gibt keinen Fehler zurück, da die Strings in den entsprechenden Integer-Wert konvertiert werden können.

Wenn Sie jedoch einen String übergeben, der kein numerischer String-Wert ist, wie z.B. “Hallo”, wird ein ValueError zurückgegeben. Das liegt daran, dass “Hello” zwar eine Zeichenkette ist, aber keine Integer-Entsprechung hat.

Ein Beispiel für einen Code, der einen ValueError erzeugt, sehen Sie unten:

# ValueError resultiert aus einem ungeeigneten int-Wert in sqrt()
import math
num = -64
root = math.sqrt(num)
print(root)

# ValueError resultiert aus der Übergabe eines Strings ohne Integer-
# Äquivalent in die Funktion int()
numString = "Hallo"
num = int(numString)
print(num)

Die Fehlermeldung des obigen Codes wird unten angezeigt:

Screenshot-from-2023-06-08-11-21-53

Die generierte Fehlermeldung lautet wie folgt:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 4, in <module>
 root = math.sqrt(num)
 ^^^^^^^^^^^^^^
ValueError: math domain error

Um den Fehler zu beheben, verwenden Sie die entsprechenden Werte in den Funktionen wie unten gezeigt:

import math
num = 64
root = math.sqrt(num)
print(root)

numString = "5231"
num = int(numString)
print(num)

IOError

Der IOError (Input/Output Error) ist eine Ausnahme, die auftritt, wenn eine Eingabe- oder Ausgabeoperation fehlschlägt. Dies kann dadurch verursacht werden, dass Sie versuchen, auf eine Datei zuzugreifen, die nicht existiert, dass der Speicherplatz auf Ihrem Gerät nicht ausreicht, dass Sie versuchen, auf eine Datei zuzugreifen, für die Sie keine ausreichenden Zugriffsrechte haben oder wenn Sie versuchen, auf eine Datei zuzugreifen, die gerade von anderen Operationen verwendet wird.

Methoden wie open(), read(), write() und close() , die typischerweise bei der Arbeit mit Dateien verwendet werden, sind diejenigen, die einen solchen Fehler verursachen können.

Betrachten Sie den folgenden Code, der versucht, eine Datei namens “notes.txt” zu öffnen, die nicht existiert. Der Code führt zu einem IOError, der den FileNotFoundError auslöst:

Screenshot-from-2023-06-09-10-19-58

Mit der folgenden Fehlermeldung:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 2, in <module>
 file1 = open("notes.txt", "r")
 ^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] Keine solche Datei oder Verzeichnis: 'notes.txt'

Um den obigen Fehler zu vermeiden, müssen Sie nur sicherstellen, dass die Datei “notes.txt” in dem Verzeichnis existiert, in dem Sie das Terminal ausführen. Eine andere Möglichkeit, IOErrors zu behandeln, ist die Verwendung des try except-Blocks , wie unten gezeigt:

Screenshot-from-2023-06-09-10-32-52

NameError

Der NameError ist eine Ausnahme, die auftritt, wenn Sie versuchen, eine Variable, eine Funktion oder ein Modul zu verwenden, das nicht existiert, im aktuellen Bereich nicht definiert ist oder dem kein Wert zugewiesen wurde.

Ein solcher Fehler tritt in der Regel auf, wenn Sie die Namen von Variablen oder Funktionen falsch schreiben oder sie verwenden, bevor sie definiert sind. Die Verwendung eines Moduls, ohne es zu importieren, führt ebenfalls zu einem NameError.

Der folgende Code führt zu einer NameError-Ausnahme:

# NameError tritt auf, weil das Mathematikmodul nicht importiert wurde
num = 64
root = math.sqrt(64)
print(root)

# NameError tritt auf, weil x verwendet wird, bevor es definiert ist
y = 23
print(x)

#NameError, weil Funktionsname nicht definiert ist
def greet():
 print("Guten Morgen")
great() #ameError: Name 'great' ist nicht definiert

Die folgenden Fehlermeldungen ergeben sich aus dem obigen Code:

Screenshot-from-2023-06-08-11-56-02

Ein Beispiel für eine NameError-Meldung finden Sie unten:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 3, in <module>
 root = math.sqrt(64)
 ^^^^
NameError: name 'math' is not defined

Um einen solchen NameError zu beheben, stellen Sie sicher, dass Sie keine Module verwenden, bevor Sie sie importieren, dass Sie keine Variablen oder Funktionen verwenden, bevor Sie sie definieren, und dass Sie Funktions- oder Variablennamen nicht falsch schreiben:

import math
num = 64
root = math.sqrt(64)
print(root)

y = 23
print(y)

def greet():
 print("Guten Morgen")
greet()

IndexFehler

Ein IndexError ist eine Ausnahme, die auftritt, wenn Sie versuchen, auf einen Index in einer Liste oder einem Tupel zuzugreifen, der außerhalb des Bereichs liegt. Betrachten Sie die folgende Liste:

liste1 = [1, 2, 3, 4, 5]

Die Liste hat fünf Elemente. Python zählt die Indizes ab 0 (Null). Daher hat die obige Liste Indizes im Bereich von 0 bis n-1, wobei n die Anzahl der Elemente in der Liste ist. In diesem Fall reicht der Index der Liste von 0 bis 4.

Wenn Sie versuchen, auf ein Element mit einem Index größer als 4 zuzugreifen, erhalten Sie einen IndexError, da der Index in der Liste, auf die Sie zugreifen wollen, außerhalb des Bereichs liegt. Der folgende Code erzeugt einen IndexFehler:

list1 = [1, 2, 3, 4, 5]
item = list1<x>[6]</x> #IndexError, weil der Index der Liste außerhalb des Bereichs liegt
print(item)

Die Fehlermeldung des Codes wird unten angezeigt:

Screenshot-from-2023-06-09-09-02-43

Die erzeugte IndexFehlermeldung lautet wie folgt:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 2, in <module>
 item = list1<x>[6]</x> #IndexError because the list index is out of range
 ~~~~~^^^
IndexError: list index out of range

Der beste Weg, einen Indexfehler zu vermeiden, ist die Verwendung der Funktionen range() und len(), um sicherzustellen, dass Sie nur auf Elemente zugreifen, die innerhalb des Bereichs liegen:

list1 = [1, 2, 3, 4, 5]

for i in range(len(list1)):
 print(list1[i])

KeyError

Ein KeyError ist eine Ausnahme, die auftritt, wenn Sie versuchen, über einen Schlüssel auf ein Element in einem Wörterbuch zuzugreifen, und der Schlüssel nicht im Wörterbuch gefunden wird. Betrachten Sie das folgende Wörterbuch:

cities = {"Kanada": "Ottawa", "USA": "Washington", "Italien": "Rom"}

Die Schlüssel des Wörterbuchs sind “Kanada”, “USA” und “Italien”. Über diese drei Schlüssel können Sie auf die Einträge im Städte-Wörterbuch zugreifen. Wenn Sie jedoch versuchen, auf ein Element mit einem Schlüssel zuzugreifen, der nicht existiert, wie z.B. “Brasilien”, erhalten Sie einen KeyError, wie unten gezeigt:

Screenshot-from-2023-06-09-09-38-06

Die erzeugte KeyError-Meldung sehen Sie unten:

 Datei "/home/madici/Desktop/helloworld.py", Zeile 6, in <module>
 print(cities["Brazil"])
 ~~~~~~^^^^^^^^^^
KeyError: 'Brazil'

Um einen KeyError zu beheben, stellen Sie sicher, dass die Schlüssel, die Sie für den Zugriff auf Elemente in einem Wörterbuch verwenden, tatsächlich im Wörterbuch vorhanden sind. Dazu können Sie eine if…else-Anweisung wie die folgende verwenden:

cities = {"Kanada": "Ottawa", "USA": "Washington", "Italien": "Rom"}

country = "Kanada"

if country in cities:
 print("Die Hauptstadt von " country " ist " cities[country])
else:
print("Der Schlüssel " country " ist nicht im cities-Wörterbuch vorhanden")

Auf diese Weise vermeiden Sie KeyErrors beim Zugriff auf Elemente aus einem Wörterbuch

Schlussfolgerung

Wenn Sie in Python programmieren, werden Sie unabhängig von Ihrem Kenntnisstand zwangsläufig auf Fehler stoßen. Machen Sie sich daher unbedingt mit den verschiedenen Fehlertypen vertraut, die in diesem Artikel beschrieben wurden, damit Sie in der Lage sind, mit ihnen umzugehen, wenn sie auftreten.

Sie können auch einige nützliche Python-Einzeiler ausprobieren, um häufige Aufgaben zu vereinfachen.

  • Collins Kariuki
    Autor
    Collins Kariuki ist Softwareentwickler und technischer Autor für Geekflare. Er hat über vier Jahre Erfahrung in der Softwareentwicklung, einen Hintergrund in Informatik und hat auch für Argot, Daily Nation und die Business Daily Newspaper geschrieben.
Dank an unsere Sponsoren
Weitere gute Lektüre zum Thema Entwicklung
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder