Verfasst: Dienstag 20. Dezember 2005, 09:03
Nun hab ich es... Ich hab ein %-zeichen vergessen, welches eigentlich als %% Escaped werden muß...
In dem Fall kommt nämlich keine gute Fehlermeldung zustande:
Wie könnte man das besser machen???
btw. Es gibt auch Template strings, die eine bessere Fehlermeldung haben soll... Gibt's allerdings erst seit Python 2.4
Code: Alles auswählen
import sys
def test(content, page_dict):
try:
print content % page_dict
except Exception, e:
import re
content_placeholder = []
for i in re.findall(r"%\((.*?)\)s", content):
if not i in content_placeholder:
content_placeholder.append(i)
content_placeholder.sort()
given_placeholder = page_dict.keys()
given_placeholder.sort()
diff_placeholders = []
for i in content_placeholder:
if (not i in given_placeholder) and (not i in diff_placeholders):
diff_placeholders.append(i)
for i in given_placeholder:
if (not i in content_placeholder) and (not i in diff_placeholders):
diff_placeholders.append(i)
diff_placeholders.sort()
raise Exception(
"%s: '%s': Can't fill internal page '%s'. \n\
*** %s placeholder in internal page: %s \n\
*** %s given placeholder for that page: %s \n\
*** diff: %s" % (
sys.exc_info()[0], e, internal_page_name,
len(content_placeholder), content_placeholder,
len(given_placeholder), given_placeholder,
diff_placeholders
)
)
internal_page_name = "KeinName"
test(
content = "Bla %(platzhalter1)s blup %<-FEHLER..",
page_dict = {
"platzhalter1": "jau",
}
)
Code: Alles auswählen
Exception: exceptions.TypeError: 'not enough arguments for format string': Can't fill internal page 'KeinName'.
*** 1 placeholder in internal page: ['platzhalter1']
*** 1 given placeholder for that page: ['platzhalter1']
*** diff: []
btw. Es gibt auch Template strings, die eine bessere Fehlermeldung haben soll... Gibt's allerdings erst seit Python 2.4
