2017-03-02 124 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的