Input validieren - Alert anzeigen - und dann die Funktion unterbrechen - Wie vorgehen

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
SnakeBite
User
Beiträge: 46
Registriert: Mittwoch 4. März 2009, 18:26

Hallo.

Ich baue gerade meinen eignen Email Client. Das momentane Logik/Denk Problem:

Ich habe ein paar GtkEntry Felder. Diese sollen auf grobe Validität der Email geprüft werden. Sollte was nicht passen, dann soll ein GtkMessageDialog ausgegeben werden und die restliche Funktion abgebrochen werden. Aber wie gehe ich dabei vor?

Grob sieht meine App im Moment so aus:

Code: Alles auswählen

def datenabgreifen():
	to = get...
	cc = get...
	bcc = get...
	subject = get....
	body = get...
	send_mail(to, cc, bcc, subject, body)
Was ich nun theoretisch möchte:

Code: Alles auswählen

def datenabgreifen():
	to = get...
		if not vlidate_email():
		GtkMessageDialog
		break  <--- Ja ich weiss das geht gar nicht
	cc = get...
	bcc = get...
	subject = get....
	body = get...
	send_mail(to, cc, bcc, subject, body)
Die selben Überprüfungen natürlich auch für CC und BCC.

Wie gehe ich hier denn am Besten vor? Try/except geht so meines Wissens nicht? eine Exception werfen will ich nicht, da ich ja das GtkMessageDialog angezeigt haben will. Ich bin hier wirklich ratlos.

Wie würdet Ihr das lösen?
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Zuerst mal mit einer Schleife. Statt da jetzt hinter jedes `get…` den nahezu gleichen Code zu schreiben. Und dann kannst Du eine Funktion/Methode durch ``return`` beenden.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
SnakeBite
User
Beiträge: 46
Registriert: Mittwoch 4. März 2009, 18:26

__blackjack__ hat geschrieben: Samstag 9. Juni 2018, 20:44 Und dann kannst Du eine Funktion/Methode durch ``return`` beenden.
Ahhhh natürlich. Einfach return False. Oh man, da hätte ich auch selbst drauf kommen müssen. Danke!
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Nein, einfach nur ``return``. Wozu sollte das `False` gut sein? Denn dann müsste man ja auch einen ``return True``-Fall haben und einen Aufrufer der das dann auswertet.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
SnakeBite
User
Beiträge: 46
Registriert: Mittwoch 4. März 2009, 18:26

OK, dann eben einfach so. Ich dachte es macht keinen Unterschied ob False oder None return-ed wird. Aber dann einfach nur return. :-)
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Du kannst das Problem aber auch vorlagern in dem Du schon bei der Eingabe validierst und dir das merkst und dem Benutzer auch gleich Rückmeldung gibst, beispielsweise durch die Hintergrundfarbe des Eingabefelds.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Eventuell wäre ja eine try: except: else: finally: Lösung für dich interessant,
schau mal hier: https://py-tutorial-de.readthedocs.io/d ... rrors.html
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
SnakeBite
User
Beiträge: 46
Registriert: Mittwoch 4. März 2009, 18:26

ThomasL hat geschrieben: Sonntag 10. Juni 2018, 14:28 Eventuell wäre ja eine try: except: else: finally: Lösung für dich interessant,
schau mal hier: https://py-tutorial-de.readthedocs.io/d ... rrors.html
Ein guter Tipp, aber nicht ganz das was ich in dem Fall brauche. Ich benötige immer eine konkrete Fehlermeldung und den "Abbruch" (besser: Nicht weiter ausführen) der Funktion.
Antworten