2017-03-02 26 views
0

私は関数の開発に若干の問題があります。Pythonバージョンの問題

問題は次のとおりです。

def clean_file(filename, file_lines): 
    file_lines = re.sub(CRYPTO_RE, subst, file_lines, re.DOTALL) 
    file_lines = re.sub(REMOVE_RE, subst, file_lines, re.DOTALL) 
    file_lines = re.sub(BANNER_RE, subst, file_lines, re.DOTALL) 
    return get_hostname_from_file(filename, file_lines) 

私は2.7システムで開発していますが、最終的には2.6システムで動作します。他のものに使用されているように私は2.6システムをアップグレードすることはできません。

2.6では、re.DOTALLを実行しますが、2.7システムでは、フラグ= re.DOTALLを含めて動作させる必要があります。

プロダクションシステムに合わせてPythonバージョンをダウングレードできますが、これをプログラムでアプローチしてコーディングで問題を解決したかったのです。格下げされた方がより現実的な答えになるだろう。

機能を実行する前にPythonのバージョンチェックを行う方法はありますか?

+2

[Pythonの2.6で 're.sub'(https://docs.python.org/release/2.6/library/re.html #re.sub)は 'flags'をまったく取っていません。あなたは' count'として 're.DOTALL'を渡します。 – jonrsharpe

答えて

3

を実行しますフラグをre.compileに渡します。返されるオブジェクトは、(フラグがpython2.7で渡されたかのように)適切に振る舞うはずのsubメソッドを持ちます。これはpython2.7とのpython2.6 IIRCに同じに動作:

CRYPTO_RE = re.compile(..., flags=re.DOTALL) 
... # Other regex's compiled here too. 

def clean_file(filename, file_lines): 
    file_lines = CRYPTO_RE.sub(subst, file_lines) 
    ... 
+0

これはそれでした。ありがとうございました。 – NineTail

-1

あなたが最初の正規表現をコンパイルすることができ、私は何か

などのアサートsys.version_info ==(2,6)

が働くべきであると信じている...しかし、私は唯一の3.xの