Seite 1 von 1

Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 16:07
von Stock63
Guten Tag alle zusammen,

Für meine Bachelorarbeit versuche ich mir ein Kennfeld mit Cantera zu erstellen und nutze Python dafür.
Die Idee ist an sich recht simpel: Ich lasse 4 Schleifen durchlaufen und Cantera berechnet mir für jeden Punkt meine gewollten Parameter aus und am Ende möchte ich mir Machzahl,Strömungsgeschwindigkeit, gamma verbrannt und gamma unverbrannt in eine Datei ausgeben lassen. Soviel zum Background.

Leider kommt es an einigen Punkten dazu, dass ich eine Warnung erhalte. Bsp.:

Warning: Temperature (3517.84 K) outside valid range of 300 K to 3500 K

Diese Warnung führt aber nicht zu einem Abbruch sondern das Programm läuft wie gewollt durch.

Nun zu meiner Frage:
Ich würde gerne die Punkte in dem Kennfeld erkenntlich machen wo diese Fehlermeldungen auftreten. Entweder soll die Fehlermeldung direkt in das Output File mitgeschrieben werden, oder eine Hilfsvariabel mit der ich vorher prüfe ob eine Warnung ausgegeben wurde oder nicht.

Code: Alles auswählen

np.savetxt('test2.csv',(gamma_u, gamma_b, M_cj, D_cj,fehler), delimiter=',')
Leider schaffe ich es nicht irgendwie diesen Fehler zu referenzieren. Also ich dachte daran z.B. nach jedem Punkt noch eine if-Schleife anzubringen in der Art:

Code: Alles auswählen

if warning==True:
    fehler=1
else:
    fehler=0
Wobei natürlich der Befehl "warning" nicht existiert und ich da eben nach einer Möglichkeit suche den Fehler zu referenzieren.

Ich hoffe sehr ich habe mich deutlich genug ausgedrückt :? und es gibt hier jemanden der mir helfen kann. Ich habe schon alles Mögliche an Artikeln/Foren gelesen und konnte leider nirgends was passendes finden. Für jeden Hilfe wäre ich sehr sehr dankbar.

Viele Grüße,
Stock63

Re: Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 16:20
von __deets__
if-Schleifen gibt es nicht. http://if-schleife.de/ :wink:

Dein Problem koennte hiermit zu loesen sein:

https://docs.python.org/2/library/warni ... g-warnings

Re: Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 16:22
von noisefloor
Hallo,

du kannst `warnings` in eine Excpetion umwandeln, auf die kannst du dann reagieren. Eine Erklärung gibt's z.B. hier: https://pymotw.com/3/warnings/

Habe ich selber aber auch noch nie gemacht bzw. benötigt.

Gruß, noisefloor

Re: Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 16:32
von __deets__
@noisefloor: dann bricht seine Berechnung aber ab. Ich bezweifele, dass das gewuenscht ist.

Re: Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 16:39
von Stock63
Hey,
erstmal danke für die schnellen Anwtorten @__deets__ & @noisefloor.

Aber leider hatte ich es bereits versucht mit dem warnings package aber leider ohne Erfolg. Auch wenn ich die Warning mit einer exception in einen Error umwandeln kann folgt folgerichtig ein Abbruch vom Programm und wie @__deets__ bereits angemerkt hat ist das nicht gewünscht.

Ich will die Warning ja gar nicht weg bekommen sondern eben nur im Output File erkenntlich machen :?

Viele Grüße,
Stock63

Re: Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 16:57
von __deets__
Aber was ich gepostet habe gibt dir diese Moeglichkeit doch. Da wird gezeigt, wie die Exceptions gesammelt werden, und dann kannst du die Verarbeiten. Also auch in eine Datei schreiben.

Re: Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 19:44
von noisefloor
Hallo,

man man eine Exception generiert kann man auch drauf reagieren:

[codebox=pycon file=Unbenannt.txt]>>> import warnings
>>> warnings.simplefilter('error', UserWarning)
>>> warning.warn('be carefull')>>> try:
... warnings.warn('be carefull')
... except UserWarning:
... print('caught warning')
...
caught warning
>>>[/code]

Wobei man dann natürlich wissen muss, welchen Typ Warnung das Programm nutzt... Die Möglichkeit von __deets__ ist mit Context Manager ist aber wohl eleganter.

Gruß, noisefloor

Re: Warning in eine Datei schreiben

Verfasst: Donnerstag 18. Januar 2018, 20:22
von __deets__
@noisefloor: das ist nicht nur eine Frage der Eleganz. Dein Ansatz unterbricht die laufende Berechnung. Meiner sammelt nur Warnungen auf. Da kommt es aber nicht zum Stack unwinding.

Re: Warning in eine Datei schreiben

Verfasst: Freitag 19. Januar 2018, 12:02
von Stock63
Hallo,
Ja an sich sollte das klappen.
Komischerweise erkennt er die von mir genannte Warnung nicht an. Wenn ich mir mit:

Code: Alles auswählen

warning.warn('valid range')
eine Warnung selber generiere kann ich durch befehle wie

Code: Alles auswählen

warnings.simplefilter('error', UserWarning)
darauf reagieren.
Ich denke das Problem liegt darin, dass die Warning von Cantera (also einem importierten Unterprogramm) ausgegeben wird und ich daher nicht weiß um was für ein Typ Warnung es sich handelt.

Bei dem Weg von @__deets__ müsste ich doch auch wissen was für ein Warnungs Typ erwartete wird oder nicht ? Ich verstehe auch nicht ganz wie ich dann die "gefangenen" exceptions weiterverarbeiten kann

Viele Grüße,
Stock63

Re: Warning in eine Datei schreiben

Verfasst: Freitag 19. Januar 2018, 12:34
von __deets__
Du musst nicht wissen, wie die Warnung heißt. Aber selbst wenn - dann musst du halt mal im Quellcode nach dem Namen schielen.

Und danach interierst du einfach über das Objekt mit den Warnungen. Spiel doch mal etwas rum, kann doch nix kaputt gehen.