Hmm, Shit, hast recht :-[ Eigentlich müsste ich dann in meine INI-Config-Klassen-Wrapper (für ConfigParser. Ist leider immer noch nciht fertig :/) an jeder stelle Implizit nen Test einbauen bzw. an der Ladestelle und der Speicherstelle :/ Hab denn test nämlich im Konstruktor erledigt.
Danke für den __wichtigen__ Hinweiß. So weit hatte ich da nicht gedacht gehabt.
thx lg
sape
Wie am besten Code aufbauen der sich debugen lässt?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, du brauchst keine impliziten Tests (geht auch gar nicht, weil Tests explizit sind) sondern explizite Fehlerbehandlungsmaßnahmen wenn die impliziten Exceptions hochkommen, wenn du auf Pfade zugreifst die es nicht gibt.sape hat geschrieben:Eigentlich müsste ich dann in meine INI-Config-Klassen-Wrapper (für ConfigParser. Ist leider immer noch nciht fertig :/) an jeder stelle Implizit nen Test einbauen bzw. an der Ladestelle und der Speicherstelle :/
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nein, du brauchst keine impliziten Tests (geht auch gar nicht, weil Tests explizit sind) sondern explizite Fehlerbehandlungsmaßnahmen wenn die impliziten Exceptions hochkommen, wenn du auf Pfade zugreifst die es nicht gibt.
Code: Alles auswählen
class Config(object):
def __init__( [...] ):
try:
self._ini = [...] # ini laden
except [...], err:
raise IOError(2, "Der angegeben Pfad existiert nicht", path)
[...]
def write(): #ini schreiben
try:
[...]
except [...], err:
raise IOError(2, "Der angegeben Pfad existiert nicht", path)
[...]
Code: Alles auswählen
class Config(object):
def __init__([...]):
path = os.path.split(filename)[0]
if not os.path.exists(path):
raise IOError(2, "Der angegeben Pfad existiert nicht", path)
self.filename = filename
self._ini = [...] # ini laden
def write(): #ini schreiben
if not os.path.exists(self.filename:
raise IOError(2, "Der angegeben Pfad existiert nicht", path)
# speichern
[...]
Ich ahtte vorher nur eine Überprüfung im Konstruktor, like this
Code: Alles auswählen
class Config(object):
def __init__([...]):
path = os.path.split(filename)[0]
if not os.path.exists(path):
raise IOError(2, "Der angegeben Pfad existiert nicht", path)
self.filename = filename
[...]
Code: Alles auswählen
class Config(object):
def __init__(self, filename, ini_content):
self._ini = SafeConfigParser()
self._ini.read(filename) # Wirft keine Exception!
self._ini_content = ini_content
self.warning_msgs = []
path = os.path.split(filename)[0]
if not os.path.exists(path):
raise IOError(2, "Der angegeben Pfad existiert nicht", path)
self._filename = filename
self._create_ini_file()
lg
Aber wenn `ConfigParser` sowieso schon eine Ausnahme auslöst, warum machst Du das dann vorher selbst?
Argh. Hab mich verlesen. `ConfigParser` löst keine Ausnahme aus. Das ist auch dokumentiert und hat den Sinn, dass man ganz einfach mehrere Dateien angeben kann, z.B. `/etc/spam.ini`, `~/.spam.ini` und `./spam.ini`, so dass diese Dateien gelesen werden, wenn sie existieren und nichts passiert, wenn sie nicht existieren.
Ah, deshalb macht das der `ConfigParser` nicht. Stimmt das ist natürlich sinnvoll und sollte man dann auch so beleasen.
Aber in meinen "Wrapper" brauche ich das schon, weil ich von eine existierenden "festen" (...\Dokumente und Einstellungen\DerAngemeldeteBenutzer\Lokale Einstellungen\Anwendungsdaten\MyApp) Verzeichnis ausgehe in den die INI-Datei angelegt bzw. gelesen wird (für meine Späteren wxPython Programme)
Naja, merke aber noch das die Klasse von mir nicht 100%ig Schlüssig ist. Werde Später mal eine Rohfassung in einen neune Thread posten. Vielleicht fällt euch ncoh was ein was man daran verbessern könnte.
lg
Aber in meinen "Wrapper" brauche ich das schon, weil ich von eine existierenden "festen" (...\Dokumente und Einstellungen\DerAngemeldeteBenutzer\Lokale Einstellungen\Anwendungsdaten\MyApp) Verzeichnis ausgehe in den die INI-Datei angelegt bzw. gelesen wird (für meine Späteren wxPython Programme)
Naja, merke aber noch das die Klasse von mir nicht 100%ig Schlüssig ist. Werde Später mal eine Rohfassung in einen neune Thread posten. Vielleicht fällt euch ncoh was ein was man daran verbessern könnte.
lg
Danke für die Antworten, ich schachtel das dann mal in den drei Funktionen in "try - except" und teste es auch entsprechend.
Zu der Frage weiter oben wegen Planung: So genau wie durch die Unittests nötig habe ich bisher noch nie geplant, meistens etwas überlegt und dann angefangen zu schreiben. Mal sehen, wie das eigentliche schreiben ist, wenn ich vorher schon genau weiß, was rauskommen soll
Zu der Frage weiter oben wegen Planung: So genau wie durch die Unittests nötig habe ich bisher noch nie geplant, meistens etwas überlegt und dann angefangen zu schreiben. Mal sehen, wie das eigentliche schreiben ist, wenn ich vorher schon genau weiß, was rauskommen soll