使用python2和python3在stderr上编写的函数

什么时候

我正在编写一个应同时适用于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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Python2和Python3中编写不同的十六进制值

来自分类Dev

select()在python2和python3上的行为是否有所不同?

来自分类Dev

python2和python3中dict的__repr __()

来自分类Dev

正确处理Python2和Python3

来自分类Dev

Python2和Python3之间的字符编码

来自分类Dev

正确处理Python2和Python3

来自分类Dev

在xlib上使用ctypes时出现python3 segfaults,python2可以工作

来自分类Dev

使用python2和python3创建一个virtualenv

来自分类Dev

使用 python3 和 python2 构建分发包的区别?

来自分类Dev

使用多个 Pipfiles 支持 python2 和 python3

来自分类Dev

如何使用将在python2和python3版本中兼容的六模块迁移代码

来自分类Dev

Python2和Python3:__init__和__new__

来自分类Dev

Python3和pip3 +为python2安装的轮子也可以用于python3

来自分类Dev

是否有在 python3 中删除的 python2 中的内置函数列表?

来自分类Dev

python2自动完成BASH shell上的文件名,python3不会

来自分类Dev

python2和python3之间的可移植元类

来自分类Dev

以与python2和python3兼容的方式将字节写入标准输出

来自分类Dev

如何分别为python3和python2设置不同的PYTHONPATH变量

来自分类Dev

Python3和Python2之间的区别-socket.send数据

来自分类Dev

捕获标准输出时python2和python3之间的StringIO可移植性

来自分类Dev

Ansible json_query在python3和python2中的不同结果

来自分类Dev

为什么Python2和Python3的行为不同

来自分类Dev

python2和python3之间的可移植元类

来自分类Dev

Python2 和 Python3 中的 bytes.decode()

来自分类Dev

是否有适当的方法使web2py使用Python3而不是Python2?

来自分类Dev

指示debhelper使用python3,但使用python2运行setup.py

来自分类Dev

在没有 python2 和 python1 或两者的情况下使用 python3 在 python 中打印?

来自分类Dev

Bottle mishandling JSON data in Python3, but not Python2

来自分类Dev

python2中的python3 datetime.timestamp?

Related 相关文章

  1. 1

    在Python2和Python3中编写不同的十六进制值

  2. 2

    select()在python2和python3上的行为是否有所不同?

  3. 3

    python2和python3中dict的__repr __()

  4. 4

    正确处理Python2和Python3

  5. 5

    Python2和Python3之间的字符编码

  6. 6

    正确处理Python2和Python3

  7. 7

    在xlib上使用ctypes时出现python3 segfaults,python2可以工作

  8. 8

    使用python2和python3创建一个virtualenv

  9. 9

    使用 python3 和 python2 构建分发包的区别?

  10. 10

    使用多个 Pipfiles 支持 python2 和 python3

  11. 11

    如何使用将在python2和python3版本中兼容的六模块迁移代码

  12. 12

    Python2和Python3:__init__和__new__

  13. 13

    Python3和pip3 +为python2安装的轮子也可以用于python3

  14. 14

    是否有在 python3 中删除的 python2 中的内置函数列表?

  15. 15

    python2自动完成BASH shell上的文件名,python3不会

  16. 16

    python2和python3之间的可移植元类

  17. 17

    以与python2和python3兼容的方式将字节写入标准输出

  18. 18

    如何分别为python3和python2设置不同的PYTHONPATH变量

  19. 19

    Python3和Python2之间的区别-socket.send数据

  20. 20

    捕获标准输出时python2和python3之间的StringIO可移植性

  21. 21

    Ansible json_query在python3和python2中的不同结果

  22. 22

    为什么Python2和Python3的行为不同

  23. 23

    python2和python3之间的可移植元类

  24. 24

    Python2 和 Python3 中的 bytes.decode()

  25. 25

    是否有适当的方法使web2py使用Python3而不是Python2?

  26. 26

    指示debhelper使用python3,但使用python2运行setup.py

  27. 27

    在没有 python2 和 python1 或两者的情况下使用 python3 在 python 中打印?

  28. 28

    Bottle mishandling JSON data in Python3, but not Python2

  29. 29

    python2中的python3 datetime.timestamp?

热门标签

归档