Python 3运算符>>打印到文件

Jos*_*osé 27 python python-3.x

我有以下Python代码来编写项目的依赖项文件.它适用于Python 2.x,但在使用Python 3进行测试时报告错误.

depend = None
if not nmake:
    depend = open(".depend", "a")
dependmak = open(".depend.mak", "a")
depend = open(".depend", "a")
print >>depend, s,
Run Code Online (Sandbox Code Playgroud)

这是错误:

Traceback (most recent call last):
  File "../../../../config/makedepend.py", line 121, in <module>
    print >>depend, s,
    TypeError: unsupported operand type(s) for >>:
      'builtin_function_or_method' and '_io.TextIOWrapper'
Run Code Online (Sandbox Code Playgroud)

使用Python 2.x和3.x的最佳方法是什么?

Dav*_*nan 40

在Python 3中,print语句已成为一个函数.新语法如下所示:

print(s, end="", file=depend)
Run Code Online (Sandbox Code Playgroud)

Python 3中的这一重大变化意味着在使用print语句/函数写入文件时,不可能在Python 2和3中使用相同的代码.一种可能的选择是使用depend.write(s)而不是打印.

更新:JF Sebastian正确地指出您可以from __future__ import print_function在Python 2代码中使用以启用Python 3语法.这将是在不同的Python版本中使用相同代码的绝佳方式.

  • 您可以使用`from __future__ import print_function`在Python 2.x中使用`print()`函数.顺便说一下,`end =""`与`print`语句中的逗号不同.比较[`print'a',; print'b'`](http://ideone.com/ogwCh)和[`print('a',end =''); print('b')`](http://ideone.com/py5k7)(注意:在后一种情况下,`a`和`b`之间没有空格).` (3认同)

Amb*_*ber 11

print() 是Python 3中的一个函数.

将代码更改为print(s, end="", file=depend),或让2to3工具为您执行此操作.

  • 您需要指定end参数以匹配py2x代码 (2认同)