Python 3 操作符 >> 输出到文件
我有一段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,
这是报错信息:
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'
有什么好的办法让这段代码在Python 2.x和3.x上都能正常工作吗?
4 个回答
3
请注意,从Python 3.6.3版本开始(2017年9月),这个情况下的错误提示信息会变成推荐使用Python 3的写法:
>>> print >> sys.stderr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>:
'builtin_function_or_method' and '_io.TextIOWrapper'.
Did you mean "print(<message>, file=<output_stream>)"?
(这里添加了明显的换行,以避免横向滚动 - 实际的错误信息会根据你终端窗口的宽度自动换行)
12
print()
是 Python 3 中的一个函数。
你可以把你的代码改成 print(s, end="", file=depend)
,或者让 2to3
工具来帮你处理。
47
在Python 3中,打印的方式变成了一个函数。新的写法是这样的:
print(s, end="", file=depend)
这个变化意味着,如果你在写文件的时候用打印功能,Python 2和Python 3的代码不能通用。一个可行的办法是用depend.write(s)
来代替打印。
更新:J.F. Sebastian正确指出,你可以在Python 2的代码中使用from __future__ import print_function
来启用Python 3的写法。这样就可以在不同版本的Python中使用相同的代码了。