2015-09-05 6 views
8

existiert, ist es möglich, 2,7 Python zu sagen, nur eine Funktionsdefinition zu analysieren, wenn ein Paket vorhanden ist?Python: Definieren Sie eine Funktion nur, wenn die Verpackung

Ich habe ein Skript, das auf mehreren Computern ausgeführt wird. Im Skript sind einige Funktionen definiert, die sehr nützlich sind, aber für die Kernoperationen, die das Skript ausführt, nicht erforderlich sind. Einige der Maschinen wird das Skript läuft auf nicht über das Paket, das die Funktion importiert, (und das Paket nicht auf sie installiert werden). Derzeit muss ich die Funktionsdefinition auskommentieren, bevor ich den Repo auf diese Maschinen kloniere. Eine andere Lösung wäre, zwei verschiedene Zweige zu pflegen, aber das ist noch mühsamer. Gibt es eine Lösung, die uns daran hindert, den Code vor dem Drücken ständig zu kommentieren?

Es gibt bereits Lösungen für, wenn die Funktion aufgerufen wird, wie folgt aus:

try: 
    someFunction() 
except NameError: 
    print("someFunction() not found.") 
+0

Warum wollen Sie die Funktionsdefinitionen kommentieren Sie benötigen? Wenn die Funktionen nicht benötigt werden, aber Sie sie trotzdem definieren, ist das wirklich ein Problem? – jme

Antwort

9

Funktionsdefinitionen und Importe in Python nur Code sind, und wie die anderen Code, können Sie sie in einem try wickeln:

try: 
    import bandana 
except ImportError: 
    pass # Hat-wearing functions are optional 
else: 
    def wear(hat): 
     bandana.check(hat) 
     ... 

die wear Funktion nur, wenn das bandana Modul zur Verfügung Dies würde definieren.

Ob dies eine gute Idee ist oder nicht, ist bis zu Ihnen - ich denke, es ist in Ihren eigenen Skripten wäre in Ordnung, aber Sie könnten nicht diese anderen Menschen verwenden in Code tun wollen.

def wear(hat): 
    try: 
     import bandana 
    except ImportError: 
     raise NotImplementedError("You need the bandana package to wear hats") 
    else: 
     bandana.check(hat) 
     ... 

Dies würde es klarer, warum Sie nicht die wear Funktion nutzen zu können: Eine weitere Idee könnte so etwas wie dies zu tun.

Verwandte Themen