2015-09-05 14 views
8

パッケージが存在する場合にPython 2.7に関数定義を解析させることはできますか?Python:パッケージが存在する場合のみ関数を定義する

私は複数のマシンで実行されるスクリプトを持っています。スクリプトに定義されたいくつかの機能がありますが、スクリプトが実行するコア操作には必要ではありません。スクリプトが実行されるマシンの中には、関数がインポートするパッケージがないものがあります(パッケージをインストールすることはできません)。現在、これらのマシンにレポをクローンする前に、関数の定義をコメントアウトする必要があります。もう1つの解決策は、2つの異なる支店を維持することですが、それはさらに退屈です。私たちがプッシュする前にコードを絶えずコメントしなくて済むのを防ぐソリューションはありますか?

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

なぜ関数定義をコメントアウトする必要がありますか?関数が必須ではなく、とにかく関数を定義するのであれば、本当に問題になりますか? – jme

答えて

9

関数の定義と輸入はPythonでコードだけであり、他のコードのように、あなたがtryでそれらをラップすることができます:

は、すでにこのような関数が呼び出されたときのためのソリューション、あります

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

これは、bandanaモジュールが使用可能な場合にのみ、wear関数を定義します。

これは良いアイデアであろうとなかろうと、あなた次第です。自分のスクリプトでうまくいくと思いますが、他の人が使用するコードではこれをしたくないかもしれません。もう一つのアイデアは、このような何かをするかもしれません:

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

これは、あなたがwear機能を使用することはできませんなぜそれがより明確になるだろう。

関連する問題