Abbruch bei Fehler mit try und except

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Marius82
User
Beiträge: 13
Registriert: Dienstag 28. August 2012, 15:15

Hallo, ich bin Neuling und arbeite grad ein Tutorial in Python durch, jetzt taucht folgendes Problem auf: Ein Fehler tritt auf, obwohl ich genau diesen Fehler mit "except" abfangen will.
Mein Code:

Code: Alles auswählen

#Zufallsgenerator
import random
random.seed()

#Werte und Berechnung
a = random.randint(1,10)
b = random.randint(1,10)
c = a + b

print 'Die Aufgabe: ', a, '+', b

#Schleife und Anzahl Versuche initialisieren
zahl = c + 1
versuch = 0

#Schleife mit while
while zahl != c:
	#Anzahl Versuche
	versuch = versuch + 1
	
	#Eingabe
	print 'Bitte Zahl eingeben: '
	z = input()
	
	#Versuch einer Umwandlung
	try:
		zahl = int(z)
	except:
		#Falls Umwandlung nicht erfolgreich
		print 'Sie haben keine Zahl eingegeben!'
		#Schleife unmittelbar fortsetzen
		continue 
	#Verzweigung
	if zahl == c:
		print zahl, 'ist richtig'
	else:
		print zahl, 'ist falsch'
#Anzahl Versuche
print 'Ergebnis: ', c
print 'Anzahl Versuche: ', versuch
Zuletzt geändert von Hyperion am Dienstag 28. August 2012, 17:36, insgesamt 1-mal geändert.
Grund: Code in Python-Code Tags gesetzt.
Ein Mann ist Programmierer. Seine Frau schickt ihn einkaufen und sagt: "Geh bitte Brot kaufen und wenn Eier da sind, dann bring sechs mit."
Er geht los und kommt mit sechs Broten zurück.
Seine Frau wütend: "Sechs Brote, was soll dass denn?"
Er: Wieso, es waren Eier da..."
deets

Schoen. Und jetzt noch den Fehler, der auftritt, bitte...
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Am Besten den Traceback (also die komplette Fehlerausgabe). Bei der bloßen Frage nach dem Fehler habe ich insbesondere nach dem Eingangsbeitrag so meine Befürchtungen...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

`input` zusammen mit `print` als Statement lassen böses erahnen... ;-) Programmierst Du für Python2 oder 3? Das wäre schon einmal wichtig zu wissen - ich vermute mal 2.x, da der Code sonst gar nicht richtig anliefe.

Des Weiteren verwende doch bitte die speziellen Code-Tags für Python: [ code=python ] ... [ /code ] (ohne die Leerzeichen natürlich).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Marius82
User
Beiträge: 13
Registriert: Dienstag 28. August 2012, 15:15

Ich benutze 2.7

Hier der Fehler:

Traceback (most recent call last):
File "C:/Python27/wer", line 22, in <module>
z = input()
File "<string>", line 1
13r
^
SyntaxError: unexpected EOF while parsing

Warum der Fehler entsteht ist mir schon klar, weil ich keine Zahl eingegeben hab sondern ein Buchstabe- aber genau diesen Fehler will ich ja durch "except" abfangen...
Ein Mann ist Programmierer. Seine Frau schickt ihn einkaufen und sagt: "Geh bitte Brot kaufen und wenn Eier da sind, dann bring sechs mit."
Er geht los und kommt mit sechs Broten zurück.
Seine Frau wütend: "Sechs Brote, was soll dass denn?"
Er: Wieso, es waren Eier da..."
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

input wertet die Eingabe als Python-Code aus. Da "13r" kein gültiges Python ist, gibt es auch einen Fehler. Du möchtest hier raw_input verwenden. Ansonsten ist deine Idee mit dem try-except schon richtig, allerdings solltest du nur ValueErros abfangen und nicht alle. Sonst baust du dir mehr Fehler ein als du löst.
Das Leben ist wie ein Tennisball.
BlackJack

@Marius82: Mal so nebenbei: Der `random.seed()`-Aufruf ist überflüssig.
Marius82
User
Beiträge: 13
Registriert: Dienstag 28. August 2012, 15:15

Danke, jetzt gehts! Jetzt sieht mein Code so aus:

Code: Alles auswählen

#Zufallsgenerator
import  random

#Werte und Berechnung
a = random.randint(1,10)
b = random.randint(1,10)
c = a + b

print 'Die Aufgabe: ', a, '+', b

#Schleife und Anzahl Versuche initialisieren
zahl = c + 1
versuch = 0

#Schleife mit while
while zahl != c:
	#Anzahl Versuche
	versuch = versuch + 1
	
	#Eingabe
	print 'Bitte Zahl eingeben: '
	try:
		z = raw_input()
	
	#Versuch einer Umwandlung
	
		zahl = int(z)
	except ValueError:
		#Falls Umwandlung nicht erfolgreich
		print 'Sie haben keine Zahl eingegeben!'
		#Schleife unmittelbar fortsetzen
		continue 
	#Verzweigung
	if zahl == c:
		print zahl, 'ist richtig'
	else:
		print zahl, 'ist falsch'
#Anzahl Versuche
print 'Ergebnis: ', c
print 'Anzahl Versuche: ', versuch
Ein Mann ist Programmierer. Seine Frau schickt ihn einkaufen und sagt: "Geh bitte Brot kaufen und wenn Eier da sind, dann bring sechs mit."
Er geht los und kommt mit sechs Broten zurück.
Seine Frau wütend: "Sechs Brote, was soll dass denn?"
Er: Wieso, es waren Eier da..."
Antworten