特定的Python2到Python3转换

特定的Python2到Python3转换,python,python-3.x,Python,Python 3.x,为了这个问题,我非常生气: LEXPRESSION(1):lambda x,y:[set_stri('t'+str(int(x)//int(y))),process_line()] LEXPRESSION(2):lambda x,y:[set_stri('t'+str(int(x)/int(y))),process_line()] ['-6','3']是参数 Lambda表达式(1)按预期将int(x)//int(y)计算为-2。 Lambda表达式(2)的计算结果为2.0。我试过不同的方法来重

为了这个问题,我非常生气:

LEXPRESSION(1):
lambda x,y:[set_stri('t'+str(int(x)//int(y))),process_line()]

LEXPRESSION(2):
lambda x,y:[set_stri('t'+str(int(x)/int(y))),process_line()]

['-6','3']是参数

Lambda表达式(1)按预期将int(x)//int(y)计算为-2。 Lambda表达式(2)的计算结果为2.0。我试过不同的方法来重新写它。在这种情况下,Float总是抢夺标志。是的,我试过float(x)/float(y),也返回2.0


我之所以说“这个上下文”,是因为如果启动解释器并创建lambda表达式,它将输出-2.0。但我有一个粗糙的人工智能翻译。它创建自己的字符串,这些字符串可以被解释并转换为语音。上面的“t”是一个Talk命令,它表示结果。因此,在eval()函数的上下文中,浮点除法的符号总是消失。浮点加法在相同的上下文中没有问题。

多亏了评论,我解决了这个问题。他们是正确的,这与上下文开关有关,设置_stri(),然后处理_line()。很难找到确切的原因(对于我的技术水平和时间都愿意花费的人来说)


我宣布这个问题解决了!在这种情况下,我能够消除对(set_stri()和process_line()的调用。Python 2代码不需要更改就可以完成相同的过程。多亏了评论员!!

您缺少了位,并且有很多不需要的信息。我假设
set_stri
只是将值添加到字符串中,然后
process_line()
不是必需的。我在Python3中运行了函数,它返回了
-2.0
。我假设这可能与。但是我也不知道
进程()在做什么,所以我不知道。但是运行
't'+str(int(x)//int(y))
在我的Python3中,你的输入给出了
-2.0
什么是
set_stri
?如果我只做
f1=lambda x,y:'t'+str(int(x)//int(y))
f2=lambda x,y:'t'+str(int(x)/int(y))
,那么
f1('-6','3')
f2('-6','3'))
,这两个值都是负值。因此问题不可重现,因为它存在于
set\u stri
我相当肯定,问题在于自定义函数
set\u stri()
,因为
-6/3
产生
-2.0
-6//3
产生
-2
。感谢大家的评论。我能够解决我的特定问题。我不认为在这里描述解决方案会有帮助,因为这是我10000行程序所做的复杂性所独有的。我在由于Python3对字符串库和功能所在位置所做的更改,我不得不重构其中的一些。我还经历了与我的pickle数据结构不兼容的情况,这导致我重新输入了大量数据。我希望尘埃落定,我们不需要Python4重新格式化语言。