gpt4 book ai didi

python - 为什么 Python 在非迭代类型的操作中会给我一个 "TypeError: argument of type ' UserAgent' is not iterable"?

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:47 24 4
gpt4 key购买 nike

我有一个 BaseHandler 类,它是我 AppEngine 站点中 Tipfy RequestHandler 的子类。在其中,我为具有包含设备名称的类属性(元组)的移动设备设置了一个“穷人的”浏览器嗅探器。

在后续方法中,我循环遍历元组中的设备名称,并根据请求对象中的用户代理字符串检查它们。如果匹配成功,我会将名为“is_mobile”的实例属性设置为 True。

然而,在那个方法中,Python 给我一个“TypeError:'UserAgent' 类型的参数不可迭代”错误,我不明白为什么,因为它提示的行不是(就我理解)一个循环。

代码如下:

class BaseHandler(RequestHandler, AppEngineAuthMixin, AllSessionMixins):

mobile_devices = ('Android', 'iPhone', 'iPod', 'Blackberry')

....

def detect_mobile_devices(self):
found_device = False

for device in self.__class__.mobile_devices:
if device in self.request.user_agent:
found_device = True
break

self.is_mobile = found_device

这是 Python 不喜欢的行:

File "/path/to/project/app/apps/remember_things/handlers.py", line 56, in detect_mobile_devices
if device in self.request.user_agent:

最佳答案

表达式

device in self.request.user_agent

会先尝试调用

self.request.user_agent.__contains__(device)

如果此方法不存在,Python 会尝试遍历 self.request.user_agent 并将它遇到的每个项目与 device 进行比较。显然,self.request.user_agent 的类型既不允许 .__contains__() 也不允许迭代,因此出现错误消息。

另见 the documentation of membership test in Python .

关于python - 为什么 Python 在非迭代类型的操作中会给我一个 "TypeError: argument of type ' UserAgent' is not iterable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289206/

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