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?