gpt4 book ai didi

python-3.x - 使用 python2 和 python3 在 stderr 上写入的函数

转载 作者:行者123 更新时间:2023-12-04 03:37:36 26 4
gpt4 key购买 nike

我正在编写一个应该同时适用于 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不是一个函数,所以我明白了
    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

关于python-3.x - 使用 python2 和 python3 在 stderr 上写入的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com