2016-04-26 8 views
0

Ich installiere eine Open-Source-Software in Python, die das errno-Modul verwendet und es in mehreren Umgebungen installierbar machen möchte, deren errno-Module abweichen können. Was ist ein gutes Muster dafür?Was ist eine gute Möglichkeit in Python fehlende Fehler im errrno Modul zu berücksichtigen?

Hier ist mein spezifischer Fall. Der Code verwendet errno.ETIME. Jedoch ist ETIME nicht in jeder Version von errno. Zum Beispiel in Anaconda for Python 2 unter Windows. (Oder vielleicht ist dies spezifisch für meine Windows-Installation?)

Nun, ein Weg, um es für sie zu überprüfen und es zuweisen, wenn er nicht da ist:

import errno 
if 'ETIME' not in dir(errno): 
    errno.ETIME = 127 

Aber das fühlt sich hacky. Gibt es dafür eine Best Practice? Vielen Dank.

Antwort

0

Verwenden Sie eine globale Variable:

ERRNO_ETIME = 127 # Or whatever your default is. 

try: 
    from errno import ETIME 
    ERRNO_ETIME = ETIME # If found, this will just override with correct ETIME if it was found 
except ImportError: 
    pass # ImportError would be thrown if it wasn't found, and you'd just keep your 127 

du in Funktion setzen könnte:

def get_etime(): 
    try: 
     from errno import ETIME 
     return ETIME 
    except ImportError: 
     return 127 

ERRNO_ETIME = get_etime() 

Dies ist ähnlich wie django überschreibt settings.py mit local_settings.py für Konfigurationswerte spezifisch für eine Maschine, mehr auf diesem hier - Django Local Settings

+0

Danke, @Bahrom. Bei beiden muss die vorhandene Referenz auf errno.ETIME geändert werden. Ich suche nach dem besten Weg, der vermeidet, diese Referenzen zu ändern. –

+0

@ user3038796 nicht sicher, was Sie meinen - Sie überschreiben nicht den Wert von "errno.ETIME" selbst - Sie erstellen eine andere Variable. Willst du das vermeiden? – Bahrom

+0

Ja, ich versuche zu vermeiden, eine andere Variable zu erstellen, so dass die vorhandenen Verweise darauf nicht geändert werden müssen –

Verwandte Themen