我正在编写一个应同时适用于python2和python3的程序。为此,我希望有一个函数可以写到同时适用于两个python版本的stderr中。
理想情况下,我认为应该是这样的:
def writeStdErr(message):
if sys.version_info >= (3, 0):
print(message, end = "", file = sys.stderr)
else:
sys.stderr.write(message)
python2是这个问题,打印不是一个函数,所以我得到
print(message, end = "", file = sys.stderr)
^
SyntaxError: invalid syntax
我可以通过添加eval来摆脱它:
def writeStdErr(message):
if sys.version_info >= (3, 0):
eval('print(message, end = "", file = sys.stderr)')
else:
sys.stderr.write(message)
但是,我不喜欢这种解决方案。我认为使用eval通常是个坏主意。
有谁知道更好/有更好的解决方案?
编辑:
对于以后遇到相同问题的任何人,似乎可以进行以下操作:
def writeStdErr(message):
sys.stderr.write(message)
要么
from __future__ import print_function
import sys
def writeStdErr(message):
print(message, file=sys.stderr)
感谢所有答案
如果您使用的是Python2.7,则可以导入新行为:
from __future__ import print_function
那应该是第一行代码(但可以在shebang之后执行)。
与早期版本兼容的另一个选择是在外部模块中创建它。
if sys.version_info >= (3, 0):
from print_sderr3 import writeStdErr
else:
from print_stderr2 import writeStdErr
您已在其中相应实现了每个位置。
就是要回答您的问题,但您可以sys.stderr.write
同时使用两者。唯一的区别是,在Python 3中,它似乎返回写入的字符数。如果以交互方式执行此操作:
>>> sys.stderr.write('aaaa\n')
aaaa
5
您可以获得额外的5
,但这仅仅是返回值。
>>> a = sys.stderr.write('aaaa\n')
aaaa
>>> a
5
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句