Gebt mir Tipps

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

bwbg hat geschrieben: Zu 2) bin ich noch nicht ganz überzeugt. None eignet sich doch hervorrangend als (mögliches) Ergebnis für eine Operation, welche fehlschlagen kann.
Nicht unbedingt! Im Grunde genommen sind dafür Exceptions oftmals die wesentlich bessere Wahl - denn damit kann ich die Fehlerbehandlung flexibel im Call-Stack behandeln, muss es also nicht unmittelbar an der aufrufenden Stelle tun. Bei einem möglichen ``None`` muss ich eigentlich immer *sofort* prüfen, ob ich etwas bekommen habe, da ich ansonsten *irgend einen* Fehler wie z.B. einen ``AttributeError`` bekomme.

Mal als Beispiel:

Code: Alles auswählen

In [3]: def get_configuration():
   ...:     return None
   ...:

In [4]: config = get_configuration()

In [5]: config.some_property
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-c6a6cf6a3f6f> in <module>()
----> 1 config.some_property

AttributeError: 'NoneType' object has no attribute 'some_property'
[5] ist hier die entscheidene Zeile, in der ich mein Resultat *irgend wie* benutzen will. Ich gehe davon aus, ein bestimmtes Objekt zu bekommen, welches eben ein Attribut ``some_property`` hält. Ich könnte da aber auch eine arithmetische Operation durchführen usw. Dann würde im Call-Stack eine quasi beliebige Exception durchgereicht.

Werfe ich hingegen eine *spezielle* Exception, wenn ich die Konfiguration nicht erstellen kann, so kann ich das zielgerichtet abfangen und zwar dort, wo es sinnvoll erscheint.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Nach einer Nacht drüber schlafen ziehe ich meine Punkte 1 und 2 zurück und behaupte das Gegenteil. Das ganze werde ich nochmal in meine gedankliche Entwurfsabteilung geben.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Mr.White
User
Beiträge: 46
Registriert: Samstag 7. März 2015, 20:03

Sorry, ich komme überhaupt nicht mit. Vielleicht habt ihr ein paar Vorschläge zum lernen für mich. Habe eine Menge
Ideen aber überhaupt keine Ahnung wie ich das mit der Umsetzung mache.. Da währe z.B ein Bot und zum
Code der hier Präsentiert wird - Sowas hab ich noch nie gesehen -
BlackJack

@Mr.White: Es gibt im Netz ein paar Seiten wo man Probleme/Aufgaben findet, die man mit Hilfe von Programmen lösen kann. Mal als Beispiele: Project Euler, Sphere Online Judge (SPOJ), HP CodeWars, und Reddit: Dailyprogrammer.
Benutzeravatar
Kebap
User
Beiträge: 774
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

@Mr.White, du benutzt Klassen, davon würde ich erstmal abraten.

Lerne erstmal Funktionen sinnvoll einzusetzen.

Dein Code ist momentan ein einziges Spaghetti-Wirrwarr aus If/Else/usw. bis in die zehnte Stufe.

Da kann niemand sinnvoll drüberschauen.

Versuch mal die Sachen in einzelne Funktionen aufzuteilen, die alle nicht tiefer als maximal 2-3 If-Stufen gehen dürfen.

Auch Listen/Dicts würde ich empfehlen zum rumspielen, bevor du wieder Klassen versuchst.

Nicht zu viel gleichzeitig oder zu schnell lernen, das verwirrt eher.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten