2014-06-13 24 views
1

我想制作一个在2.7和3.4版本上运行的Python程序。例如,我只做了一些改变,使其像print(“”,end =“”)那样工作。如何在多个Python版本中使用一个源代码?

有没有像

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 

或者使用print_function从打印问题未来图书馆

1. from __future__ import print_function 

和导入错误错误如下

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

再次感谢您的帮助

+0

另请参见:http://stackoverflow.com/questions/12162629/using-print-in-python2-x – mgilson

+0

你也可以在python2的print语句中使用parens。但是,如果您想在一个版本中使用不与其他版本编译的语法,则必须将其放入单独的模块中,并且只有在版本匹配时才导入它。 – l4mpi

+0

另请参见:[Python 2和Python 3双重开发](http://stackoverflow.com/questions/11372190/python-2-and-python-3-dual-development) – Trilarion

回答

3

你这样做,你导入任何其他事情之前:

from __future__ import print_function 

现在,你只需要使用python3.x风格打印...

+0

感谢您的答案!然而,它并没有解决我的问题,我有例如一个urllib.request导入,这在Python 2.X中不受支持。 难道没有办法告诉编译器“仅在使用python X.X时编译这部分代码”吗? – Lucas

+0

@Lucas - 为此,您可以依靠捕获'ImportError',或者通过查看'sys.version'来解决问题,并且只导入适用于您的版本的东西。你需要'__future__'的原因是在那些抛出异常的情况下,你有机会处理它(例如python2。x的'print'在_parser_中抛出一个SyntaxError,你无法处理) – mgilson

0

U可以用sys

写两个代码说python3。吡啶和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代码相同。而在这里给他们打电话

+0

感谢你的回答,但是它和我已经使用的元组完全相同。我的问题是,对于上面的代码,由于使用这两种语言,我无法在2.X和3.X中进行编译。我想要的是一种告诉编译器“如果Python版本是2.X并阅读它,如果它是3.X”的方式阅读这个方法,这样我就不会有任何编译错误。 – Lucas

+0

@lucus现在看到我已经更新 –

相关问题