Python, Konsole schließt sich bei Fehler?
Hallo zusammen, ich bin gerade etwas am Python lernen. Ich bin also gerade daran ein Programm mit input() zu Programmieren. Da ich Sublime Text als speicherungs Portal benutze muss ich input() also immer in der Konsole ausführen. Früher hab ich einfach die Datei in den CMD reingezogen und es hat sich dirket im gleichen Fenster augeführt ( der CMD schließt sich also nicht ). Nur als ich es letzens genau so wieder machen wollte hat sich plötzlich ein neues CMD Fenster geöffnet und als ich meinen ersten input beantwortet hatte hat es sich geschlossen ( Und nein das liegt nicht daran dass das Programm zuende ist sondern an einem Fehler )
Ich hatte auch schon ausprobiert den Input einfach nur durch hardcoded Antworten zu ersetzen, dann kam aber komischer Weise keine Fehlermeldung.
Wenn niemand dazu eine Lösung weiß würde es mich freuen wenn mir jemand ein Portal empfielt, was input unterstützt!
VG
2 Antworten
Dann führe es doch manuell in der Konsole aus:
python <Pfad_zu_deinem_Programm> <Commandline_Parameter>
Statt "python" kann es auch "python3" oder der Pfad zur Python-Installation, die du nutzen möchtest, sein.
python3 <Pfad_zu_deinem_Programm> <Commandline_Parameter>
meinte ich.
Aber wenn du das schon versucht hast ist esnkomisch. Da sollte sich kein neues Fenster öffnen.
Welchen Befehl genau hast du denn eingegeben?
Also vorher (als es auch geklappt hatte habe ich einfach aus dem Explorer die Datei in den CMD "gezogen" und ich habs gerade mal ausprobiert mit python 3 davor schriben da ist folgene Fehlermeldung rasugekommen
C:\Users\jonas\OneDrive\Desktop\Python_Programme\csv.lesen.py
File "<stdin>", line 1
C:\Users\jonas\OneDrive\Desktop\Python_Programme\csv.lesen.py
^
SyntaxError: unexpected character after line continuation character
>>>
Schreib doch mal deinen ganzen Befehl rein. Die Fehlermeldung klingt komisch, evtl. reichen aber Anführungszeichen um den Pfad.
Das war der Code ich halt vorher Python 3 eingegeben und Enter und dann den Pfad und wenn ich Anführungszeichen drum mache kommt das raus
>>> "C:\Users\jonas\OneDrive\Desktop\Python_Programme\csv.lesen.py"
File "<stdin>", line 1
"C:\Users\jonas\OneDrive\Desktop\Python_Programme\csv.lesen.py"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
>>>
Und das ist sicher eine CMD was du da hast?
Oder hast du folgendes gemacht:
python3 <Enter>
"C:\Users\jonas\OneDrive\Desktop\Python_Programme\csv.lesen.py" <Enter>
Das ist falsch.
In dem Falle mach einmal
exit()
Dann bist du wieder in der CMD-Umgebung und nicht in der Python-Konsole.
Ja, das hatte ich greade gemacht aber das normale hab ich vorher gemacht und das Programm funktioniert ja ber es kommt halt eine Fehlermeldung und die kann ich nicht sehen
Aber das sollte sich eben in derselben Konsole öffnen nicht in einem neuen Fenster.
Aber ich kann es halt nicht evrifizeiren, wenn du nicht das eingibst, was ich will.
Also schreib mir doch mal, was du eingibst basierend auf meiner Antwort, dann kann ich sehen, ob du da was falsch machst.
Guten Tag,
es wäre sinnvoll folgende Dinge beizulegen:
- Eine Kopie des Quellcodes in Textform, damit man das Programm testen und debuggen kann.
- Die CSV-Datei, welche zum Testen benötigt wird, oder ein kurzes Beispiel.
Ich habe den Code schnell abgetippt. (Ich beherrsche das 10-Finger Tippen bis zur Perfektion.) Hier ist er zu sehen, probiert ihn gerne einmal aus:
print("Mein name ist...")
suche = input("Name: ")
list_babys = []
namen = []
with open("babynames.csv") as bn:
for line in bn:
data = line.strip().split(",")
if data[1] == suche:
data.append(list_babys)
data[1].append(namen)
anzahl_namen = len(namen)
if suche[len(suche) - 1] == "s":
1+1
else:
suche = suche.join(s)
print(f"Es gibt {anzahl_namen}. {suche}!\n")
detail = input("Wollen sie eine detalliertere Liste sehen?")
klein_detail = detail.lower()
if klein_detail == "ja":
print(list_babys)
input("Zum beenden ENTER")
Das Dateiformat ist mir etwas schleierhaft, daher habe ich hier etwas gemutmaßt und bin zu folgenden Beispiel-Daten gekommen:
a,Ben
a,Tom
a,Kim
a,Joe
a,Doe
a,Foo
a,Bar
Wenn ich das Programm ausführe, kommt ein Fehler: Nämlich "AttributeError: 'str' object has no attribute 'append'" in Zeile 15. Dies liegt daran, dass du versuchst die Liste "namen" an den Text data[1] anzuhängen. Das ist falsch. Stattdessen müsstest du den Text der Liste hinzufügen. Nämlich so:
namen.append(data[1])
Des Weiteren ergibt Zeile 20 überhaupt keinen Sinn. (" 1 + 1") Was soll diese Zeile bezwecken?
Fazit:
Das Programm / die Konsole schließt sich, weil dein Programm nicht funktioniert, bzw. viele Fehler enthält.
Lösung:
Installiere eine gute IDE, wie etwa PyCharm. Dort werden dir deine Fehler farblich hervorgehoben und mit einer Erklärung versehen. Außerdem schließt sich die Konsole in PyCharm nicht, wenn dein Programm abstürzt, sondern zeigt eine ausführliche Fehlermeldung. Nutze diese Informationen, um deine Fehler Stück für Stück abzuarbeiten. Es befinden sich mehrere im Code, daher schließt sich das Programm. Der oben genannte Fehler ist leider nur einer von vielen.
Bsp.:
Hier ist außerdem noch von Fehlern befreiter Quellcode, der nicht abstürzt. Ob dieses Programm allerdings deinen Anwendungszweck erfüllt, weiß ich leider nicht:
print("Mein name ist...")
suche = input("Name: ")
list_babys = []
namen = []
with open("babynames.csv") as bn:
for line in bn:
data = line.strip().split(",")
if data[1] == suche:
data.append(list_babys)
namen.append(data[1])
anzahl_namen = len(namen)
if suche[len(suche) - 1] == "s":
1+1
else:
suche = suche.join("s")
print(f"Es gibt {anzahl_namen}. {suche}!\n")
detail = input("Wollen sie eine detalliertere Liste sehen?")
klein_detail = detail.lower()
if klein_detail == "ja":
print(list_babys)
input("Zum beenden ENTER")
Hochachtungsvoll,
Rainer von Wink

Also mit dem Installations-Pfad hab ich es schon probiert und es kommt das selbe raus. Aber was meinst du mit python 3 ? Also ich hab die neuste Version 3.11