【问题标题】:How to use one source code in several Python versions?如何在多个 Python 版本中使用一个源代码?
【发布时间】:2014-06-13 09:39:41
【问题描述】:

我想做一个在 2.7 和 3.4 版本上运行的 Python 程序。例如,我只有很少的更改可以像 print("", end="") 那样工作。

有没有类似的标签

if __name__ == "__main__":

或其他东西,我可以将其放入我的代码中以获得类似的东西:

1. python_version = platform.version_tuple()
2. if python_version[0] == 3:
3.     print("myprint", end="")
4. else:
5.     print "my second print",

如何避免这段代码出现任何编译错误?


感谢您的所有回答,我的问题不是很清楚,但您确实提供了帮助。阅读您的答案后,我找到了这个详细的网站:

http://python3porting.com/noconv.html

它解释了如何将 python2 和 python3 处理为相同的代码,而不将其分成 2 个冗余部分。

正确的做法是使用 sys.version

1. import sys
2. if sys.version < '3':
3.     #some code for python 3.X
4. else:
5.     #some code for older python

或者使用future库中的print_function

1. from __future__ import print_function

对于打印问题和 ImportError 错误如下

1. try:
2.     from urllib.request import urlopen
3. except ImportError:
4.     from urllib import urlopen

再次感谢您的帮助

【问题讨论】:

标签: python versions


【解决方案1】:

您在导入其他任何内容之前执行此操作:

from __future__ import print_function

现在你只需使用 python3.x 样式打印...

【讨论】:

  • 感谢您的回答!但是它并不能完全解决我的问题,例如,我有一个 urllib.request 导入,它在 Python 2.X 中不受支持。有没有办法告诉编译器“只有在使用 python X.X 时才编译这部分代码”?
  • @Lucas -- 为此,您可以依靠捕获ImportError,或查看sys.version,正如您在问题中所展示的那样,只导入适用于您的版本的内容。您需要__future__ 的原因是针对那些在 有机会处理它之前抛出异常的极端情况(例如python2.x 的printparser 你无法处理的)
【解决方案2】:

你可以使用系统

写两个代码说python3.py和python2.py

import sys   
a= sys.version_info
if a.major=='2':
   import python2
   #run functions of python 2 this contain code compiles in python2
else:
   import python3
   #run functions of python 3 this contain code compiles in python3

为了更容易,在两个 python 代码中给每个方法名称都一样。并在这里调用它们

【讨论】:

  • 感谢您的回答,但它与我已经在使用的元组做同样的事情。我的问题是,使用上面的代码,由于使用两种语言,我无法在 2.X 和 3.X 中编译。我想要的是告诉编译器“如果python版本是2.X就读这个,如果它是3.X就读这个”这样我就不会出现任何编译错误。
猜你喜欢
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多