Seite 1 von 1

Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 11:15
von recnice
Hallo,
folgendes Problem:
ich habe ein Master-File in dem bestimmte Platzhalter stehen
  • #-----Eventuell einen Status laden
    ${LOAD_STATUS}

    #-----Enzeit
    hier sollte eigentlich ${End_TIME} stehen
    #-----Eventuell Status rausschreiben
    ${WRITE_STATUS}
Mein Python-Programm soll nun das Master-File öffen und die Platzhalter umbenennen und in eine neue aktuallisiert Datei generieren.
Das funktioniert soweit auch :lol: ! Was ich nun machen wollte ist folgendes:
Da alle Platzhalter in dem Maste-File enthalten sein müssen, möchte ich, dass sobald ein Platzhalter fehlt, in diesem Beispiel ${END_TIME}dass das Programm abgebrochen wird.
So sieht der Code aus:
W

Code: Alles auswählen

def edit_cmd(CMD_MASTER,CMD_NEW):
	
	with open(CMD_MASTER,'r') as infile:
		with open(CMD_NEW,'w') as outfile:
			data = infile.readlines()
			for eintrag in data:
				try:
					#print eintrag
					if '${END_TIME}' in eintrag:
							pandas_Time(outfile)
							
					elif '${WRITE_STATUS}' in eintrag:
							#save status
							pandas_save_status(outfile)	
					
					else:
						outfile.write(eintrag)
				except NameError:
					sys.exit('%s nicht gefunden' %eintrag)
Wie gesagt, ist '${END_TIME}'' in dem Master-file nicht enthalten, somit müsste das Programm abgebrochen werden und ein neues File dürfte nicht generiert werden. Was passiert ist folgendes:
#-----Eventuell einen Status laden
${LOAD_STATUS}

#-----Enzeit


#-----Eventuell Status rausschreiben
save status_step1.5 mesh ascii gzip
'${END_TIME} ist nicht vorhanden, trotzdem bricht das Programm nicht ab,
hat jemand eine Idee woran es liegt???

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 11:24
von snafu
Verstehe ich es (ausgehend von deinem Codestück) richtig, dass du glaubst, Python wirft einen `NameError`, sobald eine bestimmte Zeichenkette nicht in einem String enthalten ist? Falls ja, dann kann ich dir jetzt schon sagen, dass dies nicht passieren wird... ^^

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 11:25
von recnice
Ja dass hatte ich gehofft. :oops:
"raised when a local or global name is not found"

Was wäre denn die richtige exception??

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 11:33
von snafu
Überhaupt keine. Für Python ist das nur eine Zeichenkette. Die Programmiersprache weiß nicht auf magische Weise, dass der Teilstring innerhalb deiner Datei als Platzhalter verwendet wird. Die "X-in-Y"-Prüfung gibt einen Wahrheitswert zurück - mehr nicht.

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 11:38
von snafu
Und bevor du jetzt wie wild rumprobierst (dein Code sieht nicht gerade berauschend aus), empfehle ich einen Blick in die deutsche Version des offiziellen Python-Tutorials. Es ist nicht zielführend, dir ernsthaft zu helfen, wenn du die verwendete Programmiersprache nichtmal in ihren Grundzügen kennst (und so scheint es mir ehrlich gesagt).

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 11:53
von Hyperion
@recnice: Ist das Masterfile mit seiner Template-Syntax fix vorgegeben? Wenn nein, solltest Du evtl. darüber nachdenken, eine vorhandene Template-Engine zu nutzen und das Format entsprechend umzustellen :-)

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 12:03
von recnice
@ Hyperion
Die Syntax ist fix.
Die Idee war nur, falls bei dem erstellen des Masterfiles, im Eifer des Gefechts, vergessen wrid ein Platzhalter zu setzten, eben dies
zu beginn des Programms erkannt wird und nicht irgendwann später.... :roll:

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 12:05
von webspider
Protip: Man kann nur Ausnahmen behandeln, die auch tatsächlich auftreten. Wenn du dir unsicher bist welche geworfen wird oder ob überhaupt eine geworfen wird, dann lass die Fehlerbehandlung weg und provoziere einen Fehler um zu sehen welche kommen.

Bei diesem schrittweisen Vorgehen baust du dir von den absoluten Grundlagen ein lauffähiges Programm auf anstatt eine Menge Quellcode zu schreiben um später zu bemerken, dass du verdammt viel umschreiben musst bis er läuft.

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 12:06
von Hyperion
recnice hat geschrieben:@ Hyperion
Die Syntax ist fix.
Darf man fragen aus welchem Kontext das stammt? Evtl. gibt es für das Format ja sogar einen fertigen Parser!

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 12:12
von recnice
Ich arbeite mit einem FEM-Programm das bei uns am Institut entwickelt wurde. Ich denke nicht dass es dafür Parser gibt :D

Gruß

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 12:44
von Hyperion
Na gut, dann musst Du eben manuelle einen Parser schreiben. Wenn das Format nicht komplexer wird, d.h. Tags nicht in Kommentaren vorkommen, immer nur ein Tag pro Zeile usw., dann sollte das nicht so schwierig sein.

Ich würde mir ein Dictionary (Tag-Name -> Wert) anlegen und in jeder Zeile der Datei nach einem Vorkommen des Keys suchen. Wenn ja, ersetzt man es durch den in einem Dictionary dafür vorgesehenen Wert. Dann fügt man an eine "Check"-Liste den Key hinzu. Am Ende kannst Du dann einfach mittels zweier ``sets`` testen, welche Du zum einen aus den Keys des Dictionaries und zum anderen aus der "Check"-Liste generierst, ob alle Tags in der Datei enthalten waren.

Re: Probleme mit Exceptions

Verfasst: Freitag 9. März 2012, 13:03
von lunar
Wieso reden alle vom Parsen?! Wenn es nur darum geht, Platzhalter ohne Rücksicht auf das Format der Datei zu ersetzen, reicht Template.safe_substitute(). Wenn Du vorher prüfen willst, ob auch alle Platzhalter vorhanden sind, reicht ein einfacher "in" Test auf der gelesenen Datei.

Ansonsten kann ich mich meinen Vorrednern nur anschließen: Die Idee, "NameError" abzufangen, um das Fehlen von Platzhaltern zu erkennen, ist so absurd, dass ich Dir auch dringend rate, erst einmal die Sprache zu lernen, bevor Du in dieser Sprache möglicherweise produktiv genutzte Programm schreibst. Nichts für ungut...

Re: Probleme mit Exceptions

Verfasst: Montag 12. März 2012, 02:22
von Leonidas
lunar hat geschrieben:Wieso reden alle vom Parsen?! Wenn es nur darum geht, Platzhalter ohne Rücksicht auf das Format der Datei zu ersetzen, reicht Template.safe_substitute(). Wenn Du vorher prüfen willst, ob auch alle Platzhalter vorhanden sind, reicht ein einfacher "in" Test auf der gelesenen Datei.
Ich vermute dass es den anderen ähnlich ging wie mir, und sie nicht wussten, das ``${PLATZHALTER}`` in ``string.Template`` gültige Syntax ist, statt nur ``$PLATZHALTER``. Und ja, in dem Fall ist das natürlich die beste Lösung, was für ein Glück dass das Format mehr oder minder zufällig diese Syntax nutzt :)

Re: Probleme mit Exceptions

Verfasst: Montag 12. März 2012, 15:35
von Hyperion
Leonidas hat geschrieben: Ich vermute dass es den anderen ähnlich ging wie mir, und sie nicht wussten, das ``${PLATZHALTER}`` in ``string.Template`` gültige Syntax ist, statt nur ``$PLATZHALTER``. Und ja, in dem Fall ist das natürlich die beste Lösung, was für ein Glück dass das Format mehr oder minder zufällig diese Syntax nutzt :)
Ok, war ich also nicht der einzige, der das nicht wusste :D Ich hatte es nach lunars Posting gleich probiert und war tatsächlich überrascht, dass das ohne Subclassing out-of-the box funzt.