Behebung häufiger Python-Probleme

Erfahren Sie, wie Sie häufige Python-Probleme beheben können.

Anforderungen

  • Python installiert und läuft
  • Linux-Server
Dedicated Server
Dedizierte Server mit modernsten Prozessoren
  • 100 % Enterprise-Hardware
  • Minutengenaue Abrechnung
  • Nur bei uns: Cloud-Funktionen

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:

#!/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:

sudo python helloworld.py

Die Ausgabe sollte so aussehen:

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:

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.

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:

sudo chmod 644 helloworld.py

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

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):

Sie können dieses Testskript mit dem Befehl ausführen:

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:

./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:

sudo chmod 755 helloworld.py

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

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):

Sie können dieses Testskript mit dem Befehl ausführen:

./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:

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:

#!/usr/bin/python

Domain-Check

Domain-Check

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.

Dieser Whitespace muss gelöscht werden, bevor das Skript korrekt ausgeführt wird.

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:

Wenn wir die Datei öffnen, werden wir sehen, dass dies der Fall ist:

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:

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:

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

Behebung von Iterationsproblemen

Hier ist der einfachste Weg, dies richtig zu tun:

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:

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:

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:

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:

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.

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:

sudo chmod 755 [filename]

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

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:

Das offizielle Python.org Wiki enthält  eine vollständige Liste der aktuellen (und inaktiven) 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, 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:

sudo yum install epel-release

Als nächstes installieren Sie Pip mit dem Befehl:

sudo yum install python-pip

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

sudo pip install bottle

Installation von Bottle auf Ubuntu 14.04

Zuerst installieren Sie Pip mit dem Befehl:

sudo apt-get install python-pip

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

sudo pip install bottle
HiDrive Cloud-Speicher
Ihr sicherer Online-Speicher
  • Daten zentral speichern, teilen und bearbeiten
  • Serverstandort Deutschland (ISO 27001-zertifiziert)
  • Höchste Datensicherheit im Einklang mit der DSGVO

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:

sudo nano helloworld.py

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

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:

@route('/helloworld')

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

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:

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:

sudo python helloworld.py

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

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.

War dieser Artikel hilfreich?
Page top