Schnelle Frage von welchem Exception Type ist ein int()

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
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Liebe Community,
Ich bin gerade dabei mein kleines Programm weiter zu schreiben.
Dabei stellt sich mir gerade folgendes Problem.
Ich bekomme den Inhalt einer tk.Entr().get()
als String.
Im Ideal-Fall muss ich diese in einen Int verwandeln mit int()
es gibt aber auch den Fall das dies nicht gelingt.
Somit habe ich eine Try Exception drumherum gebastelt.
Um noch ein paar Gummi-Punkte zu sammeln,
möchte ich diese Exception auf den Typ beschränken der vorliegt.
Wenn und nur wenn die Typ-Umwandlung mit int(value) misslingt.
Dazu brauch ich aber den Typ dieser Exception.

Kann mir da mal jemand aushelfen

Mungo1981
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Code: Alles auswählen

>>> int("Probier es doch einfach selbst aus")
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Ok than it is
ValueError

or???
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja.
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Ok, Danke dass hab ich begriffen
Benutzeravatar
Miscelo
User
Beiträge: 15
Registriert: Sonntag 2. Februar 2020, 21:39

Vielleicht hilft dir auch type(x) weiter.

Code: Alles auswählen

if type(entry.get()) == str:
	print("do something")
elif type(entry.get() == int:
	print("do other thing")
else:
	print("DAta type error")
# Don't Panik!
answer = lambda x: 42
answer("question")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Miscelo: da das Entry *immer* einen String zurueck gibt, hilft das nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13202
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Miscelo: Ergänzend ist ein Typtest in der Regel ein „code smell“ und man macht den auch nicht mit `type()` und ``==`` sondern mit `isinstance()`.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Benutzeravatar
Miscelo
User
Beiträge: 15
Registriert: Sonntag 2. Februar 2020, 21:39

Korrekt. Hätte ich vielleicht mal testen sollen. isinstance() ist eine gute Lösung.
# Don't Panik!
answer = lambda x: 42
answer("question")
Antworten