gpt4 book ai didi

python - Django 误解 NamedTuple

转载 作者:行者123 更新时间:2023-12-01 08:11:05 28 4
gpt4 key购买 nike

我们在代码中有一个 NamedTuple,如下所示:

from typing import NamedTuple

class StandardParameters(NamedTuple):
offset: int
limit: int
locale: str

这在使用 Python 3.6.6 的本地计算机上运行良好,在 ./manage shell 下导入此文件,并且在使用 ./manage runserver< 的本地服务器 (macOS) 上运行良好。/.

这在 Ubuntu 生产服务器上也可以正常工作,使用 ./manage shell 并导入此文件。但是,如果我们使用生产服务器的 Django HTTP 服务器,则该类定义会失败:

function() argument 1 must be code, not str 

Django 错误响应表明它与我们在本地通过 ./manage shell 使用的 Python 版本相同,3.6.6。但它无法将 NamedTuple 作为一个类进行评估。

果然,如果我添加raise Exception(str(NamedTuple)),那么在我们的本地系统上,它会记录“class NamedTuple”,但在 Ubuntu HTTP 服务器上,它会记录“function NamedTuple”。这让我们感觉我们正在使用旧版本的 Python,但同样,返回的 DEBUG 响应指示 3.6.6。

我们在代码中只有另一个 NamedTuple,并且它正在 Ubuntu 服务器上运行。它以“向后兼容”的形式使用:

from typing import NamedTuple

ClientInfo = NamedTuple('ClientInfo', [
('client', Client),
('clientVersion', str),
('device', str),
('platform', Platform),
('platformVersion', str),
])

它们会相互作用吗?即便如此,它在 Mac 上的 3.6.6 上是否会以一种方式运行,在 Ubuntu 上通过 ./manage shell 运行,但在 Ubuntu 上通过 HTTP 接口(interface)以不同的方式运行?

最佳答案

您提供的错误消息和诊断输出表明您没有使用 Python 3.6 标准库版本的 typing 模块。您以某种方式获得了旧版本的 typing backport安装在 Django 服务器正在使用的 virtualenv 上。卸载反向移植应该会取消隐藏typing的标准库版本,从而允许您使用Python 3.6中引入的功能。

关于python - Django 误解 NamedTuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250561/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com