在Python 3文件中运行Python 2代码

3

如何在Python 3文件中运行Python 2代码? 我需要使用一个写在Python 2中的函数,它位于一个Python 2文件中。但是我需要在Python 3文件中导入它并使用这个函数。是否可以以Python 2模式运行该函数?


这取决于你的函数长什么样子。 - yash
有没有办法在Python 2中只运行一行代码? - chicken_wings
不是的,据我所知 @chicken_wings - yash
请贴出您正在导入的函数的代码。 - yash
1个回答

1

通常情况下,无法使用Python 3运行Python 2代码。尽管手动转换相对简单。

如果您有长文件,还应考虑使用2to3,它将应用所需的修复程序以使您的代码在Python 3中运行。

如果您已经安装了Python 3,则只需在终端中运行以下命令。

2to3 your_file_name.py

请注意,有时2to3无法将Python2转换为Python3。如果它注意到了这一点,它会发出警告,并指出您需要手动修复哪些行。
尽管如此,2to3也可能没有注意到输出代码无法正常工作。这就是您在评论中给我的示例所发生的情况。
input('Type text here: ').encode('utf-8').encode('hex')

这段代码在Python3中无法工作,原因可以在这里找到。 2to3无法意识到这一点的原因是因为这实际上是语法上完全有效的代码。实际上,你可以预示 inputstr.encode 的方式使其成为可运行的代码。
总之,有时候你必须阅读错误并自己修复代码。

我尝试使用2to3,但它只更改了一行代码,并没有改变其余的代码。由于这是一个作业,将会接受抄袭检查,所以我无法在此处发布代码。 - chicken_wings
有时候2to3无法自动修复您的代码。在运行后,您是否收到了一些警告?如果没有代码或至少是来自2to3的警告,我们将无能为力。 - Olivier Melançon
另外,如果没有需要转换的内容,它就不会执行转换,对吧?@Olivier - yash
我相信2to3工具应该保持Python 3脚本不变。 - Olivier Melançon
这是我的意思: Python 2 代码: def test(): user_input = raw_input('在此输入文本:') hex_output = user_input.encode('utf-8').encode('hex') print (hex_output)test()使用 2to3 转换的 Python 3 代码: def test(): user_input = input('在此输入文本:') hex_output = user_input.encode('utf-8').encode('hex') print (hex_output)test()如果您在 Python 2 中运行代码,它可以正常工作,但如果您在 Python 3 中运行它,则无法正常工作。 因此,我想做的是在不编辑 Python 2 代码的情况下,在 Python 3 文件中调用 Python 2 文件。 - chicken_wings
你不能使用Python2和Python3同时运行。这就好比询问为什么Python不能编译C代码一样,除非你有一些转换器(如2to3)。我发现了你的错误,尽管2to3确实很难找出它。在Python3中使用UTF-8编码返回的是一个“bytes”对象,它没有属性encode。这里是解决方案,但你必须手动修复:https://dev59.com/uWw15IYBdhLWcg3wbLHU - Olivier Melançon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接