Vermeidung verschachtelter try...except Blöcke
Verfasst: Freitag 10. März 2017, 13:57
Hallo,
ich versuche gerade, JSON-Objekte, die als Email-Attachments ankommen, zu dekodieren. Diese können in unterschiedlichen Kodierungen ankommen, so dass nicht jeder Versuch von Erfolg gekrönt ist. Derzeit sieht das so aus:
Ist häßlich und kann ggf. zu einer beliebigen Tiefe der Verschachtelung führen, was dann irgendwann unlesbar wird.
Als Alternative fällt mir bisher nur so was ein (ungetestet):
Das würde zwar nicht zu weiterer Verschachtelung führen, ist aber vielleicht auch nicht intuitiv für jeden zu lesen.
Gibt es eine einfachere (und lesbarere) Möglichkeit, so was auszudrücken?
ich versuche gerade, JSON-Objekte, die als Email-Attachments ankommen, zu dekodieren. Diese können in unterschiedlichen Kodierungen ankommen, so dass nicht jeder Versuch von Erfolg gekrönt ist. Derzeit sieht das so aus:
Code: Alles auswählen
try:
# plain text?
myvar = json.loads(mystring)
except ValueError:
# base64?
try:
myvar = json.loads(base64.decode(mystring))
except ValueError:
try:
# quoted-printable?
myvar = json.loads(quopri.decodestring(mystring))
except ValueError:
logger.error("None of the above.")
Als Alternative fällt mir bisher nur so was ein (ungetestet):
Code: Alles auswählen
def decode_string(source_string, mydecoders=None):
if mydecoders is None:
mydecoders = iter((lambda x: x, base64.decode, quopri.decodestring))
try:
current_decoder = next(mydecoders)
return json.loads(current_decoder(source_string))
except ValueError:
return decode_string(source_string, mydecoders)
except StopIteration:
return None
Gibt es eine einfachere (und lesbarere) Möglichkeit, so was auszudrücken?