# Behebung häufiger Python-Probleme

Erfahren Sie, wie Sie häufige [Python](https://www.ionos.at/digitalguide/websites/web-entwicklung/python-tutorial/ "Python-Tutorial")-Probleme beheben können.

## Anforderungen

- Python installiert und läuft
- Linux-Server

## Ein einfaches Skript zum Testen von Python

Für Testzwecke ist es am besten, die Dinge einfach zu halten. Verwenden Sie dieses Skript, um Python entweder von der Befehlszeile oder in einem Browser zu testen:

```none
#!/usr/bin/python
print "Content-Type: text/html"
print "\n\n"
print "<p>Hello World</p>"
```

Speichern Sie dieses Skript in einer Datei namens helloworld.py.

Beginnen Sie mit der Fehlerbehebung, indem Sie Ihr Skript über die Befehlszeile testen:

```none
sudo python helloworld.py
```

Die Ausgabe sollte so aussehen:

[![Bild: Testen von Python](https://www.ionos.at/digitalguide/fileadmin/_processed_/1/1/csm_command-line-output-of-hello-world-python-script_e41f537513.webp "Testen von Python")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/command-line-output-of-hello-world-python-script.jpg)      ##  Dekodierung eines Python-Fehlers

Wenn Python ein Problem mit dem Skript findet, versucht es am besten, Ihnen mitzuteilen, was das Problem ist und wo es sich befindet.

Hier ist ein Beispiel für einen Fehler, der durch das Entfernen des Doppelpunktes : am Ende einer for-Anweisung verursacht wurde:

[![Bild: Dekodierung eines Python-Fehlers](https://www.ionos.at/digitalguide/fileadmin/_processed_/6/8/csm_troubleshooting-python-error-message_9aa552bee2.webp "Dekodierung eines Python-Fehlers")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-error-message.jpg)      Diese Fehlermeldung besteht aus drei Elementen:

- Die Zeile des Codes, in dem der Fehler auftritt (Zeile 3 in diesem Beispiel).
- Ein ^-Zeiger, der die genaue Position des Fehlers herausfindet (nach den besten Fähigkeiten von Python).
- Die Fehlermeldung selbst ("SyntaxError: invalid syntax").

In diesem Beispiel hat Python das Problem genau identifiziert. Es gibt einige Situationen - insbesondere wenn ein Anführungszeichen oder eine Endklammer fehlt - in denen Python nicht in der Lage ist, die Position des Fehlers so leicht zu erraten. Wenn Sie diese Fehler lesen, denken Sie daran, dass das Problem an oder vor dem Ort auftreten könnte, den Python identifiziert.

## Permission Denied

Wenn Sie beim Versuch, dieses Python-Skript von der Befehlszeile aus auszuführen, einen Fehler "permission denied" erhalten, sind die Berechtigungen höchstwahrscheinlich falsch.

[![Bild: permission denied](https://www.ionos.at/digitalguide/fileadmin/_processed_/5/4/csm_troubleshooting-python-permission-denied_d76bfca7e7.webp "permission denied")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-permission-denied.jpg)      Die Lösung für dieses Problem hängt davon ab, wie Sie das Skript aufrufen.

### Berechtigung verweigert beim Ausführen eines Skripts mit dem Python-Befehl

Im Gegensatz zu einem CGI-Skript müssen Python-Skripte keine Ausführungsrechte haben, um ausgeführt zu werden, wenn Sie sie mit dem Befehl python aufrufen. Python ist eine interpretierte Sprache, was bedeutet, dass, wenn Sie die Datei mit python\[filename\] aufrufen, Python selbst die Ausführung übernimmt. Die Datei muss nur von Python lesbar sein.

Um dies einzustellen, verwenden Sie den Befehl:

```none
sudo chmod 644 helloworld.py
```

Um die Berechtigungen zu überprüfen, listen Sie die Dateien im Verzeichnis mit dem Befehl auf:

```none
sudo ls -la
```

In diesem Beispiel sehen Sie, dass die Datei helloworld.py Lese-/Schreibrechte für den Eigentümer und Leserechte für Gruppe und Welt hat (chmod 644):

[![Bild: Lese-/Schreibrechte](https://www.ionos.at/digitalguide/fileadmin/_processed_/b/1/csm_troubleshooting-python-chmod-755_b54456489c.webp "Lese-/Schreibrechte")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-chmod-755.jpg)      Sie können dieses Testskript mit dem Befehl ausführen:

```none
sudo python helloworld.py
```

### Berechtigung verweigert beim Ausführen eines Skripts von der Shell aus

Die andere Möglichkeit, ein Python-Skript auszuführen, besteht darin, es direkt aus der Shell aufzurufen:

```none
./helloworld.py
```

Aufgrund der Art und Weise, wie die Shell diesen Befehl interpretiert, muss die Datei ausführbar sein. Um die Berechtigungen zu korrigieren, verwenden Sie den Befehl:

```none
sudo chmod 755 helloworld.py
```

Um die Berechtigungen zu überprüfen, listen Sie die Dateien im Verzeichnis mit dem Befehl auf:

```none
sudo ls -la
```

In diesem Beispiel sehen Sie, dass die Datei helloworld.py über Lese-/Schreib-/Ausführungsrechte für den Eigentümer und Lese-/Schreibrechte für Gruppe und Welt verfügt (chmod 755):

[![Bild: Eigentümer und Lese-/Schreibrechte für Gruppe und Welt ](https://www.ionos.at/digitalguide/fileadmin/_processed_/d/f/csm_troubleshooting-python-chmod-644_26ab4b435d.webp "Eigentümer und Lese-/Schreibrechte für Gruppe und Welt ")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-chmod-644.jpg)      Sie können dieses Testskript mit dem Befehl ausführen:

```none
./helloworld.py
```

## Bad interpreter: Keine solche Datei oder Verzeichnis

Es gibt eine zweite Möglichkeit, ein Python-Skript direkt aus der Shell auf der Kommandozeile aufzurufen: Der Pfad zu Python muss korrekt sein. Andernfalls erhalten Sie einen "Bad interpreter": Keine solche Datei oder Verzeichnis" Fehler.

Sie können den Pfad zu Python von der Befehlszeile aus mit dem Befehl finden:

```none
which python
```

Normalerweise ist der Pfad zu Python /usr/bin/python, aber dies kann je nach Installation oder Betriebssystem variieren.

Die erste Zeile des Skripts ist #!, gefolgt vom Pfad zu Python auf Ihrem System. Wenn der Pfad zu Python beispielsweise /usr/bin/python lautet, muss die erste Zeile des Skripts gelesen werden:

```none
#!/usr/bin/python
```

## Einzug Fehlermeldung

Python ist empfindlich gegenüber Leerzeichen (Leerzeichen am Anfang einer Zeile). Jede Zeile muss korrekt eingerückt sein, denn so "liest" Python verschachtelte Codeblöcke. Diese Fehler können auch auftreten, wenn Sie Tabulatorstopps mit Leerzeichen mischen.

Es gibt drei damit zusammenhängende Fehler:

- **unerwarteter Einzug:** Es gibt ein oder mehrere Leerzeichen am Anfang einer Zeile, die nicht vorhanden sein sollten.
- **unindent entspricht keiner äußeren Einrückungsebene:** Es gibt weniger Leerzeichen am Anfang der Zeile, als es sein sollte.
- **einen eingerückten Block erwartet:** Ein Codeblock sollte am Anfang jeder Zeile Leerzeichen haben, aber das tut er nicht.

Wenn Sie beispielsweise ein Skript von einer Webseite kopieren und einfügen, werden Sie manchmal versehentlich am Anfang jeder Zeile in Leerzeichen eingefügt.

[![Bild: Einzug Fehlermeldung](https://www.ionos.at/digitalguide/fileadmin/_processed_/c/8/csm_troubleshooting-python-whitespace_6973069e40.webp "Einzug Fehlermeldung")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-whitespace.jpg)      Dieser Whitespace muss gelöscht werden, bevor das Skript korrekt ausgeführt wird.

[![Bild: Whitespace löschen](https://www.ionos.at/digitalguide/fileadmin/_processed_/6/1/csm_troubleshooting-python-no-whitespace_1e07c5931e.webp "Whitespace löschen")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-no-whitespace.jpg)      Die Python-Fehlermeldung wird Ihnen oft genau sagen, wo sich der zusätzliche Whitespace befindet. In diesem Beispiel gibt die Fehlermeldung an, dass das Problem in Zeile 4 der Datei liegt:

[![Bild: Problem in Zeile 4](https://www.ionos.at/digitalguide/fileadmin/_processed_/e/9/csm_troubleshooting-python-indent_7a10f1ce7b.webp "Problem in Zeile 4")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-indent.jpg)      Wenn wir die Datei öffnen, werden wir sehen, dass dies der Fall ist:

[![Bild: Python-Fehlermeldung](https://www.ionos.at/digitalguide/fileadmin/_processed_/6/a/csm_troubleshooting-python-indent-found_4b41d5ea6c.webp "Python-Fehlermeldung")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-indent-found.jpg)      Das Entfernen der zusätzlichen Leerzeichen am Anfang von Zeile 4 ermöglicht es, dass dieses Skript korrekt ausgeführt wird.

## TypeError Fehlermeldungen

"TypeError"-Meldungen bedeuten, dass Sie eine Art von Daten so behandeln, als wären es eine andere Art von Daten.

### Beim Iterieren über mehrere Elemente hinweg

Eine Möglichkeit, wie dies geschieht, ist, wenn Sie versuchen, über jedes Element in einer Liste oder Zeichenkette zu iterieren. Es gibt eine Reihe von Variationen zu diesem Fehler, einschließlich:

**"TypeError: range() integer end argument erwartet, got list."**

Ein Beispiel für Code, der diesen Fehler verursacht:

```none
pet = ['Dog', 'Cat', 'Guinea Pig']
for i in range(pet):
    print (pet[i])
```

**"TypeError: Listenindizes müssen ganze Zahlen sein, nicht str".**

Ein Beispiel für Code, der diesen Fehler verursacht:

```none
pet = ['Dog', 'Cat', 'Guinea Pig']
for i in pet:
    print (pet[i])
```

**Behebung von Iterationsproblemen**

Hier ist der einfachste Weg, dies richtig zu tun:

```none
pet = ['Dog', 'Cat', 'Guinea Pig']
for i in pet:
    print i
```

### Beim Umgang mit Daten

Eine weitere Quelle von "TypeError"-Meldungen ist die Behandlung von Nicht-Zeichenkettendaten als Zeichenkette.

**"TypeError: kann keine 'str' und 'int' Objekte verketten".**

Ein Beispiel für Code, der diesen Fehler verursacht:

```none
widgetCount = 2
print 'I would like ' + widgetCount + ' widgets.'
```

Es gibt zwei Möglichkeiten, dieses Problem zu beheben:

**1. Ändern des Datentyps**

Wenn Sie den Wert in Anführungszeichen setzen, wird Python angewiesen, ihn wie eine Zeichenkette zu behandeln:

```none
widgetCount = '2'
print 'I would like ' + widgetCount + ' widgets.'
```

**2. Aufruf der Daten als Ganzzahl**

Alternativ können Sie catCount als Ganzzahl aufrufen, indem Sie Kommas anstelle von + Pluszeichen verwenden:

```none
widgetCount = 2
print 'I would like ', widgetCount, ' widgets.'
```

**3. Verketten Sie die Daten korrekt.**

Wenn Sie Zeichenketten und ganze Zahlen zu einer Zeichenkette zusammenfügen müssen, ist eine korrekte Methode, die ganzen Zahlen zuerst in das Zeichenkettenformat zu konvertieren:

```none
widgetCount = 2
first = 'I would like '
last = ' widgets.'
request = first + str(widgetCount) + last
print request
```

## SyntaxError-Meldungen

Eine "SyntaxError"-Meldung bedeutet, dass in Ihrem Code ein Tippfehler vorliegt. Einige häufige Auslassungen und Fehler sind:

- Ein einzelnes = verwenden, wenn du == gemeint hast.
- Vergessen, ein : am Ende einer Anweisung wie for, while, if, if, etc. zu setzen.
- Eine fehlende \] oder ) Klammer.
- Verwenden Sie ein Semikolon, wenn Sie ein Doppelpunkt gemeint haben.
- Versehentliches Ersetzen einer Klammer (Klammer oder \[ eckige Klammer durch eine geschweifte Klammer).
- Rechtschreibfehler wie z.B. fro statt for.
- Das Weglassen eines ' Anführungszeichens beim Arbeiten mit einer Zeichenkette, wie print('widgets) oder print(widgets').

## Python-Skript wird nicht in einem Browser ausgeführt

Wenn Sie ein Python-Skript in ein Webverzeichnis fallen lassen und das Skript in einem Browser besuchen, erhalten Sie wahrscheinlich nur den Text des Skripts in Ihrem Browser und nicht die Ausgabe des Skripts selbst.

[![Bild: Python-Skript wird nicht in einem Browser ausgeführt](https://www.ionos.at/digitalguide/fileadmin/_processed_/c/7/csm_troubleshooting-python-in-browser_acf644a384.webp "Python-Skript wird nicht in einem Browser ausgeführt")](https://www.ionos.at/digitalguide/fileadmin/DigitalGuide/Screenshots_2020/troubleshooting-python-in-browser.jpg)      Es gibt zwei Möglichkeiten, Python-Skripte in einem Webbrowser auszuführen:

Behandeln Sie die Python-Dateien als CGI-Skripte und führen Sie sie aus dem cgi-bin-Verzeichnis aus.

Installieren Sie ein Web-Framework für Python.

Welche Option Sie wählen, hängt von Ihren individuellen Bedürfnissen und Vorlieben ab.

### Option 1: Python-Skripte als CGI-Skripte ausführen

Um ein Python-Skript als CGI-Skript auszuführen, legen Sie das Skript einfach in das Verzeichnis /cgi-bin/ Ihres Webservers und machen Sie die Datei mit dem Befehl ausführbar:

```none
sudo chmod 755 [filename]
```

Um beispielsweise die Datei helloworld.py ausführbar zu machen, lautet der Befehl:

```none
sudo chmod 755 helloworld.py
```

Wenn Ihr Webserver kein /cgi-bin/ konfiguriert hat, lesen Sie unser Tutorial zur Einrichtung eines CGI-Bins.

### Option 2: Installieren Sie ein Web Framework für Python.

Ein Python-Web-Framework ermöglicht es Entwicklern, Webanwendungen in Python zu schreiben. Es gibt viele Web-Frameworks für Python. Jedes hat seine eigenen Vor- und Nachteile, die Sie berücksichtigen müssen, bevor Sie sich für eine Installation entscheiden.

Einige beliebte Python-Web-Frameworks beinhalten:

- [Bottle](http://bottlepy.org/docs/dev/index.html "Bottle")
- [CherryPy](http://www.cherrypy.org/ "CherryPy")
- [Django](https://www.djangoproject.com/ "Django")
- [Flask](http://flask.pocoo.org/ "Flask")
- [web2py](http://www.web2py.com/ "web2py")

Das offizielle Python.org Wiki enthält eine vollständige Liste der aktuellen (und inaktiven) [Python-Web-Frameworks](https://wiki.python.org/moin/WebFrameworks "Python-Web-Frameworks").

Als Beispiel werden wir Bottle installieren, ein leichtgewichtiges Python-Web-Framework, das einfach zu installieren und zu bedienen ist.

## Installation von Bottle

Die Installation von Bottle auf CentOS 7 und Ubuntu 14.04 ist ein zweistufiger Prozess. Zuerst müssen Sie installieren [Pip](https://pip.pypa.io/en/stable/ "Pip"), der ein Paketmanager für Python ist. Dann verwenden Sie Pip, um Bottle zu installieren.

### Installation von Bottle auf CentOS 7

Beginnen Sie mit der Installation des EPEL-Repository mit dem Befehl:

```none
sudo yum install epel-release
```

Als nächstes installieren Sie Pip mit dem Befehl:

```none
sudo yum install python-pip
```

Verwenden Sie schließlich Pip, um Bottle mit dem Befehl zu installieren:

```none
sudo pip install bottle
```

### Installation von Bottle auf Ubuntu 14.04

Zuerst installieren Sie Pip mit dem Befehl:

```none
sudo apt-get install python-pip
```

Verwenden Sie dann Pip, um Bottle mit dem Befehl zu installieren:

```none
sudo pip install bottle
```

## Beispiel: Verwenden von Bottle zur Ausführung eines einfachen Python-Skripts

Gehen Sie in das Stammverzeichnis Ihrer Website und erstellen Sie mit dem Befehl eine Datei namens helloworld.py:

```none
sudo nano helloworld.py
```

Die erste Zeile der Datei muss Bottle aufrufen, die Route importieren und ausführen:

```none
from bottle import route, run
```

Als nächstes definieren wir die Route als /helloworld. Dies ist die URL, mit der Sie auf Ihr Skript zugreifen können:

```none
@route('/helloworld')
```

Die nächsten beiden Zeilen definieren die Helloworld-Funktion, die "Hello World" an den Browser ausgibt:

```none
def helloworld():
    return "Hello World"
```

Die letzte Zeile unseres Testskripts definiert den Host und den Port, über den auf das Skript zugegriffen wird.

- Verwenden Sie für den Host den Domänennamen oder die IP-Adresse Ihres Servers.
- Für den Port verwenden Sie 8080. Wenn sich Ihr Server hinter einer Firewall befindet, müssen Sie möglicherweise den Zugriff auf diesen Port erlauben, bevor Sie fortfahren können.

run(host='example.com', port=8080)

Hinweis: Sie können jeden Port für Ihre Bottle-Skripte verwenden. Port 8080 wird von der üblichen Konvention für alternative Webdienste verwendet. Wenn Port 8080 auf Ihrem Server verwendet wird, wählen Sie einfach einen anderen Port, der nicht verwendet wird, damit Bottle sich daran binden kann.

Das gesamte Skript lautet wie folgt:

```none
from bottle import route, run
@route('/helloworld')
def helloworld():
    return "Hello World"
run(host='example.com', port=8080)
```

Speichern und beenden Sie die Datei.

Als nächstes müssen Sie das Skript von der Befehlszeile aus ausführen und es weiter ausführen, damit Sie in einem Browser auf das Skript zugreifen können. Starten Sie das Skript mit dem Befehl:

```none
sudo python helloworld.py
```

Nun, da das Skript ausgeführt wird, wechseln Sie zu einem Browser und besuchen Sie die URL:

```none
http://example.com:8080/helloworld
```

Du solltest die Worte "Hello World" im Browser sehen.

Sobald Sie fertig sind, können Sie mit'STRG + c' das Skript verlassen und zur Befehlszeile zurückkehren.


This is a markdown version of: [https://www.ionos.at/digitalguide/websites/web-entwicklung/behebung-haeufiger-python-probleme/](https://www.ionos.at/digitalguide/websites/web-entwicklung/behebung-haeufiger-python-probleme/) for AI/LLM consumption.