Почему Python дает мне "TypeError: аргумент типа" UserAgent "не повторяется" в операции без итераций?
У меня есть класс BaseHandler, который подклассов Tipfy RequestHandler на моем сайте AppEngine. В нем я настроил анализатор браузера "бедняга" для мобильных устройств с атрибутом класса (кортеж), содержащим имена устройств.
В последующем методе я перебираю имена устройств в кортеже и проверяю их по строке пользовательского агента из объекта Request. Если я получаю совпадение, я устанавливаю атрибут экземпляра с именем 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:
1 ответ
Выражение
device in self.request.user_agent
сначала попробую позвонить
self.request.user_agent.__contains__(device)
Если этот метод не существует, Python пытается перебрать self.request.user_agent
и сравнивает каждый элемент, с которым он сталкивается device
, Очевидно, тип self.request.user_agent
ни один не позволяет .__contains__()
ни итерации, отсюда и сообщение об ошибке.
Также см. Документацию теста членства в Python.