Python 3.x 将Python3转换为Python2
我试图在python 2中的代码中使用Python 3.x 将Python3转换为Python2,python-3.x,python-2.7,syntax-error,converters,Python 3.x,Python 2.7,Syntax Error,Converters,我试图在python 2中的代码中使用finviz包(为python 3编写)。导入时,我得到SyntaxError: values = f'tickers: {tuple(self._tickers)}\n' \ ^ SyntaxError: invalid syntax 库中出现的代码如下所示: def __repr__(self): """ Returns a string r
finviz
包(为python 3编写)。导入时,我得到SyntaxError:
values = f'tickers: {tuple(self._tickers)}\n' \
^
SyntaxError: invalid syntax
库中出现的代码如下所示:
def __repr__(self):
""" Returns a string representation of the parameter's values. """
values = f'tickers: {tuple(self._tickers)}\n' \
f'filters: {tuple(self._filters)}\n' \
f'rows: {self._rows}\n' \
f'order: {self._order}\n' \
f'signal: {self._signal}\n' \
f'table: {self._table}\n' \
f'table: {self._custom}'
return values
finviz
的API是,这一部分在screener.py
直到3.6才引入Python
使用str.format()插入具有类似语法的字符串的2.x兼容方法
或者,下面是str.format在您的示例中的外观:
values = ('tickers: {tickers}\n'
'filters: {filters}\n'
'rows: {rows}\n'
'order: {order}\n'
'signal: {signal}\n'
'table: {table}\n'
'table: {custom}'
)
values.format(
tickers=tuple(self._tickers),
filters=tuple(self._filters),
rows=self._rows,
order=self._order,
signal=self._signal,
table=self._table,
custom=self._custom,
)
for str.format()直到3.6才引入Python
使用str.format()插入具有类似语法的字符串的2.x兼容方法
或者,下面是str.format在您的示例中的外观:
values = ('tickers: {tickers}\n'
'filters: {filters}\n'
'rows: {rows}\n'
'order: {order}\n'
'signal: {signal}\n'
'table: {table}\n'
'table: {custom}'
)
values.format(
tickers=tuple(self._tickers),
filters=tuple(self._filters),
rows=self._rows,
order=self._order,
signal=self._signal,
table=self._table,
custom=self._custom,
)
对于str.format()
f'{x} {y}' == '{}, {}!'.format(x, y)
但是请不要!Python 2的生命结束了。2020年后,它将不再收到更新,即使是出于安全考虑。最好将Python 2中的所有内容重写为Python 3。您可以使用如下格式替换f字符串:
f'{x} {y}' == '{}, {}!'.format(x, y)
但是请不要!Python 2的生命结束了。2020年后,它将不再收到更新,即使是出于安全考虑。最好将Python 2中的所有内容重写为Python 3。为什么要为Python 2编写新代码?到今年年底,这将是生命的终结;没有补丁,即使是为了安全。您能用Python 3编写所有内容并避免这种情况吗<代码>3to2是一件事,但是纯粹为Python 3设计的包不太可能在没有人工干预的情况下返回到Python 2。关键是,即使我们为您解决了这个特定的问题,代码中也可能充斥着其他Python 3-only的东西(其中一些东西不会明显地触发
SyntaxError
s,它们可能只是默默地表现不好).我已经有很多Python 2中的代码,现在我只测试了一些东西,还没有准备好将所有东西迁移到Python 3。我尝试了3to2
,但没有成功。好吧,但我想告诉你的是,将仅3.x版本的软件包迁移回Python 2通常要比将2.x版本的软件包迁移到Python 3花费的工作量至少要多,如果不是更多的话<代码>语法错误s明显;库使用、异常层次结构、文本/二进制不匹配等方面的微妙之处可能根本就不会被发现,将精力花在向后移植到Python2而不是向前移植到Python3上是对有限资源的浪费。要么移植到Python3,要么在使用之前不要使用finviz
。为什么要为Python2编写新代码?到今年年底,这将是生命的终结;没有补丁,即使是为了安全。您能用Python 3编写所有内容并避免这种情况吗<代码>3to2是一件事,但是纯粹为Python 3设计的包不太可能在没有人工干预的情况下返回到Python 2。关键是,即使我们为您解决了这个特定的问题,代码中也可能充斥着其他Python 3-only的东西(其中一些东西不会明显地触发SyntaxError
s,它们可能只是默默地表现不好).我已经有很多Python 2中的代码,现在我只测试了一些东西,还没有准备好将所有东西迁移到Python 3。我尝试了3to2
,但没有成功。好吧,但我想告诉你的是,将仅3.x版本的软件包迁移回Python 2通常要比将2.x版本的软件包迁移到Python 3花费的工作量至少要多,如果不是更多的话<代码>语法错误s明显;库使用、异常层次结构、文本/二进制不匹配等方面的微妙之处可能根本就不会被发现,将精力花在向后移植到Python2而不是向前移植到Python3上是对有限资源的浪费。要么移植到Python 3,要么在使用之前不要使用finviz
。了解这一点很有用。了解这一点很有用。