Ich habe mehrere mögliche Dateien, die meine Daten halten könnten; Sie können auf verschiedene Arten komprimiert werden. Um sie zu öffnen, muss ich file()
, gzip.GzipFile()
und andere verwenden, die ebenfalls ein Dateiobjekt zurückgeben (das die with
Schnittstelle unterstützt).Mehrere `` `` `` `` `` ``
möchte ich jeden von ihnen versuchen, bis man in der Öffnung gelingt, so konnte ich so etwas wie
try:
with gzip.GzipFile(fn + '.gz') as f:
result = process(f)
except (IOError, MaybeSomeGzipExceptions):
try:
with xCompressLib.xCompressFile(fn + '.x') as f:
result = process(f)
except (IOError, MaybeSomeXCompressExceptions):
try:
with file(fn) as f:
result = process(f)
except IOError:
result = "some default value"
tun, was offensichtlich nicht möglich, falls die ich Dutzende von möglichen Kompressionsvarianten haben. (Die Verschachtelung wird immer tiefer und der Code sieht immer sehr ähnlich aus.)
Gibt es einen schöneren Weg dies zu buchstabieren?
EDIT: Wenn möglich, würde ich gerne die process(f)
aus dem Versuch/außer auch, um versehentliches Abfangen von Ausnahmen in der process(f)
ausgelöst zu vermeiden.
Ich denke, ich mag diesen Ansatz noch mehr als der andere. – Alfe
Schön. Ich mag besonders den zweiten Ansatz. Ich würde vorschlagen, dass beide Ansätze eine Ausnahme für UnknownCompressionFormat werfen. –