Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许一个脚本由多个Python版本运行_Python - Fatal编程技术网

允许一个脚本由多个Python版本运行

允许一个脚本由多个Python版本运行,python,Python,我想知道这样的事情是否可能: import sys if sys.version[0] == '2': print 'this would fail in python3' if sys.version[0] == '3': print("and this would fail in 2") 现在,如果执行此操作,则在运行此代码时,python2或python3将失败。有没有办法只在代码版本正确时运行它,而在代码版本错误时完全忽略它 您也可以在python 2中导入py

我想知道这样的事情是否可能:

import sys    
if sys.version[0] == '2':
    print 'this would fail in python3'
if sys.version[0] == '3':
    print("and this would fail in 2")

现在,如果执行此操作,则在运行此代码时,python2或python3将失败。有没有办法只在代码版本正确时运行它,而在代码版本错误时完全忽略它

您也可以在python 2中导入python 3的打印函数

from __future__ import print_function
import sys    
if sys.version[0] == '2':
    print('this would fail in python3')
if sys.version[0] == '3':
    print("and this would fail in 2")

它在两个python版本中都能完美工作。

如果我理解正确,答案是否定的,您不能通过python3运行python代码,而忽略python2打算运行的位,就像没有括号的
print
语句一样

但是,您可以将代码拆分为两个单独的模块,并在使用python3或python2运行它们之前进行检查


更好的选择是编写与python3和python2兼容的代码

让Python 3忽略行是不可能的

print 'this would fail in python3'
从Python3的角度来看,有语法错误。程序首先作为一个整体进行解析(即使是运行时未执行的行),然后执行。语法错误导致无法解析

对于Python2和Python3,您必须使代码语法正确。例如,你可以

from __future__ import print_function
然后


将在Python2和Python3中同样工作。

我使用下面的代码片段,用于我确实需要有多个代码才能支持版本2和版本3的地方

from __future__ import print_function
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division

import sys

if (sys.version_info > (3, 0)):
    # Python 3 code here
    print("Code for Python3 won't work in py2")
else:
    # Python 2 code here
    print("Code for python3 won't work here")

如果你在Python3上尝试这一点,肯定会因为缺少括号(第3行)而出现错误是的,这就是重点。有没有办法不让python3检查python2的代码段,反之亦然?将L3更改为
print('this fail in python3')
,它将运行(对于python2和python3),我担心如果您使用的语法仅由python2(例如,不带括号的打印)或python3(例如,带星号的表达式)支持程序总是会出现语法错误,并且无法运行。正如其他人指出的那样,您可以尝试坚持两个版本支持的语法。也许可以帮助您完成您想要做的事情。您不需要使用print函数在Python2和Python3中纠正语法,只需要在两个print之间加括号即可calls@Chris_Rands是的,没错。但是2和3中的行为会有所不同,这可能会导致错误,因此我更喜欢导入
print\u函数
from __future__ import print_function
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division

import sys

if (sys.version_info > (3, 0)):
    # Python 3 code here
    print("Code for Python3 won't work in py2")
else:
    # Python 2 code here
    print("Code for python3 won't work here")