1

AppEngine サイトに Tipfy RequestHandler をサブクラス化する BaseHandler クラスがあります。その中で、デバイス名を含むクラス属性 (タプル) を使用して、モバイル デバイス用の "貧弱な" ブラウザー スニファーをセットアップしました。

後続のメソッドでは、タプル内のデバイス名をループして、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:
4

1 に答える 1

5

表現

device in self.request.user_agent

最初に電話しようとします

self.request.user_agent.__contains__(device)

このメソッドが存在しない場合、Python は反復を試み、self.request.user_agent遭遇した各項目を と比較しdeviceます。明らかに、self.request.user_agent許可.__contains__()も反復もしないタイプであるため、エラーメッセージが表示されます。

Python でのメンバーシップ テストのドキュメントも参照してください。

于 2011-03-13T12:03:05.357 に答える