0%

Die nötigen Grundlagen der Kommandozeile

Wenn die Shell Nein sagt

Diese beiden Fehler werden dir in deinen ersten Wochen am Terminal oft begegnen. Beide sehen beunruhigend aus, und beide bedeuten etwas eng Begrenztes und Behebbares.

“command not found”

pythno report.py
bash: pythno: command not found

Die Shell hat nach einem Programm namens pythno gesucht, keines gefunden und angehalten. Bis zu deiner Datei kam sie gar nicht. report.py in dieser Zeile wurde noch nicht einmal berücksichtigt.

Lies die Meldung wörtlich: Sie nennt das, was nicht gefunden wurde. Fast immer liegt ein Tippfehler vor. Gelegentlich ist das Programm tatsächlich nicht installiert. Das ist das Thema von Kapitel 4, nicht von dieser Lektion.

“No such file or directory”

python data/report.py
python: can't open file '/workspace/data/report.py': [Errno 2] No such file or directory

Dieser Fall unterscheidet sich in einem wichtigen Punkt: Die Shell hat python problemlos gefunden und ausgeführt. Python ist gestartet, hat nach der angegebenen Datei gesucht und konnte sie nicht finden.

Beachte, dass die Meldung einen absoluten Pfad enthält, /workspace/data/report.py, obwohl du einen relativen eingegeben hast. Dieser Pfad ist ein nützlicher Hinweis: Python sagt dir genau, wo es gesucht hat. Vergleiche ihn mit pwd, um zu prüfen, ob du die richtige Datei vom falschen Verzeichnis aus angegeben hast.

Startprobleme von Ausnahmen in deinem Code unterscheiden

Der erste Fehler kam von Bash: Die Shell konnte den Befehl nicht finden. Der zweite kam vom Python-Interpreter: Bash hat Python gestartet, aber Python konnte das angeforderte Skript nicht öffnen. Beide Vorgänge stoppten, bevor die erste Zeile von report.py ausgeführt wurde.

Eine Ausnahme innerhalb deines Programms sieht anders aus. Python zeigt einen Traceback mit Dateien und Zeilennummern an, der mit dem Ausnahmetyp endet:

Traceback (most recent call last):
  File "/workspace/report.py", line 3, in <module>
    print(f"You have read {len(boks)} books.")
                               ^^^^
NameError: name 'boks' is not defined

Aus Fundamentals I weißt du bereits, wie du das liest. Neu ist die Entscheidung, welche Ebene du untersuchen solltest. Prüfe bei command not found den Befehlsnamen. Prüfe bei can't open file den Skriptpfad und das Arbeitsverzeichnis. Prüfe bei diesem NameError-Traceback die genannte Zeile in deinem Code.

Mache aus „kein Traceback“ keine allgemeingültige Regel. Später in diesem Kurs werden deine eigenen Kommandozeilenprogramme einige erwartete Fehler absichtlich ohne Traceback melden. Hier unterscheiden Befehlsname, Pfad und Traceback gemeinsam diese drei Beispiele.

Du führst python reprot.py aus und erhältst can't open file '/workspace/reprot.py': [Errno 2] No such file or directory. Was ist schiefgegangen?

Welche Aussage vergleicht die drei Fehler aus dieser Lektion richtig?

Das sind die nötigen Grundlagen der Kommandozeile. Du kannst herausfinden, wo du bist, nachsehen, was dort liegt, an einen anderen Ort wechseln, Dateien erstellen und verschieben, eigene Programme ausführen und die Ebene bestimmen, die für diese häufigen Fehler verantwortlich ist.

Die nötigen Grundlagen sind hier entscheidend. Dieses Kapitel hat die Befehle erklärt, die du für Python brauchst, und dort aufgehört. Wenn du den Rest des Werkzeugkastens kennenlernen möchtest, darunter cp, rm und rmdir, gibt es dazu ein Kapitel in Computer Fundamentals:

Das nächste Kapitel gibt deinen Programmen einen eigenen Platz.

Wenn du bei einer Fehlermeldung nicht sicher bist, woher sie kommt, kopiere sie zu Monty und frage: „Hat die Shell den Befehl gefunden, hat Python das Skript gefunden und ist mein Code gestartet? Woran in der Meldung erkennen wir das?“ Die gesuchte Fähigkeit ist, die fehlerhafte Ebene zu bestimmen. Durch wiederholtes Nachfragen entwickelst du sie.