2

GAE アプリは自分のコンピューターから正常に動作しますが、アップロードすると AttributeError が発生し始めます。具体的には次のとおりです。

AttributeError: 'dict' object has no attribute 'item'

pylast インターフェイス ( last.fm_link の API) を使用しています。具体的には、次のタイプの変数のリストにアクセスしています。

SimilarItem = _namedtuple("SimilarItem", ["item", "match"])

このタイプの変数があり、それを呼び出し、属性エラーが発生したときにsimアクセスしようとしています。sim.item

私は自分のコンピューターで Python 2.6 を使用しており、GAE が Python 2.5 で動作することを理解しています。それはここで違いを生むでしょうか?下位互換性があると思いました。

最後に、インポートするモジュールに問題がある可能性があると思いますpylast.GAEなどで動作しないのでしょうか? 私はいくつかの調査を行いましたが、結果は得られませんでした。インポートは次のとおりです。

import hashlib
import httplib
import urllib
import threading
from xml.dom import minidom
import xml.dom
import time
import shelve
import tempfile
import sys
import htmlentitydefs

このイライラする問題について何か助けていただければ幸いです。前もって感謝します。

4

2 に答える 2

4

そうです、Python 2.6 はほとんどが2.5 と下位互換性があります。これは、2.5 で動作するものはほとんど 2.6 でも動作することを意味します。しかし、 backwardsの 意味を誤解しているようです。これはforwardsの反意語です。つまり、2.6 で実行されるもの (2.6 にあるが 2.5 にはなかった新しい機能を使用する場合) は2.5 (またはそれ以前) では実行されない可能性が完全にあることを意味します。バージョン)。確かに、それを避ける唯一の方法は、新しいバージョンの Python に新しい機能をまったく追加しないことです。

したがって、ローカルの GAE 開発に 2.6 を使用することはあまりお勧めできません。製品版では 2.5 が使用されることがわかっているからです。Python 2.5 をpython.org (または、Linux を使用している場合は Linux ディストリビューションの特定のリポジトリ)からダウンロードしてインストールし、2.6 ではなくそのバージョンを使用するように GAE SDK を指定してみませんか? それはあなたの人生を大幅に楽にするでしょう!

于 2010-03-22T15:17:25.337 に答える
3

Python 2.5 にはnamedtuple. 2.6で追加されました。

編集:_namedtuple関数は Python 2.6 以降で提供されpylast、実数を使用するように見えますが、Python 2.5 以前でnamedtupleは単純な古いものにフォールバックします。dictつまり、本番環境で実行する場合はsim['item']orを使用する必要があります。sim.get('item')

その関数のソースは次のとおりです。

def _namedtuple(name, children):
    """
        collections.namedtuple is available in (python >= 2.6)
    """

    v = sys.version_info
    if v[1] >= 6 and v[0] < 3:
        return collections.namedtuple(name, children)
    else:
        def fancydict(*args):
            d = {}
            i = 0
            for child in children:
                d[child.strip()] = args[i]
                i += 1
            return d

        return fancydict
于 2010-03-22T14:58:14.373 に答える