Python 3.x 将Python3转换为Python2

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

我试图在python 2中的代码中使用
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
。了解这一点很有用。了解这一点很有用。