Python版本问题与re

时间:2017-03-02 21:54:27

标签: python python-2.7 python-2.6

我在开发功能方面遇到了一些问题。

问题在于以下功能。

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系统上你必须包含flags = re.DOTALL才能使它工作。

我可以降级我的python版本以匹配生产系统,但我想以编程方式处理并通过编码解决问题。等级降级将是更实际的答案。

有没有办法在运行函数之前进行python版本检查?

2 个答案:

答案 0 :(得分: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)
    ...

答案 1 :(得分:-1)

我相信像

这样的东西

断言sys.version_info ==(2,6)

应该工作......但我只运行3.x

相关问题