我在开发功能方面遇到了一些问题。
问题在于以下功能。
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版本检查?
答案 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