2017-03-02 174 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',你會將're.DOTALL'作爲'count'傳遞。 – jonrsharpe

回答

3

你可以先編譯正則表達式並將標誌傳遞給re.compile。返回的對象將有一個sub方法,該方法應該適當地行爲(就好像該標誌是通過python2.7傳遞的)。這在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的