为什么Python会在非迭代类型的操作中给我一个“TypeError:类型为'UserAgent'的参数不可编辑”?

为什么Python会在非迭代类型的操作中给我一个“TypeError:类型为'UserAgent'的参数不可编辑”?,python,google-app-engine,tipfy,Python,Google App Engine,Tipfy,我有一个BaseHandler类,它是AppEngine站点中Tipfy RequestHandler的子类。在其中,我为移动设备设置了一个穷人浏览器嗅探器,该嗅探器的class属性是一个包含设备名称的元组 在随后的方法中,我循环遍历元组中的设备名称,并根据请求对象中的用户代理字符串检查它们。如果得到匹配项,则将名为is_mobile的实例属性设置为True 然而,在该方法中,Python给了我一个TypeError:类型为“UserAgent”的参数不是iterable error,我不理解为

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

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

然而,在该方法中,Python给了我一个TypeError:类型为“UserAgent”的参数不是iterable error,我不理解为什么,因为它所抱怨的行与我所理解的循环不一样

代码如下:

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_代理,并将遇到的每个项与设备进行比较。显然,self.request.user\u代理的类型既不允许。也不允许迭代,因此会出现错误消息

另请参见。

表达式

device in self.request.user_agent
我会先打电话给你

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


另请参阅。

谢谢!我不知道,谢谢你!我没有意识到这一点。