0

次のコードがあります。

from suchandsuch import bot

class LaLaLa():
    def __init__(self):
        self.donenow = 0
        print "LaLaLa() initialized."
        return

    def start(self):
        pages = bot.cats_recursive('something')
        for page in pages:
            self.process_page(page)

を実行しようとするy = LaLaLa()y.start()、エラーが発生します。

AttributeError: LaLaLa instance has no attribute 'cats_recursive'

これは、Python がsuchandsuch のボット サブモジュール (ファイルの先頭で定義されている) からではなく、もちろん cats_recursive() を持たない LaLaLa() から cats_recursive ( ) を呼び出そうとしているのではないかと疑っています。関数。クラスのインスタンスに、自分自身の内部を見るだけでなく、インポートされたモジュールを強制的に使用させる方法はありますか?

4

3 に答える 3

1

あなたは元気です。ほとんどの場合cats_recursive()、実際のモジュールには属性がありません。構文を確認し、モジュールの内容を確認してください。

于 2013-05-19T16:43:30.683 に答える
1

これを行う最も簡単な方法は、 をクラス外の変数に割り当ててcats_recursive()から、そのpages変数をstart()パラメーターとして関数に渡すことです。これが機能する場合は、そのままにしておきます。機能しない場合は、おそらく他の場所のコードに問題があります。

于 2013-05-19T16:46:52.703 に答える
1

ポスターは、投稿したコードに問題がないことを示しています。

おそらく問題があるのは、投稿しなかったコードです。これは、cats_recursive の名前付けで示唆されています。おそらく LaLaLa が bot.py で定義されているか、bot.py にインポートされていることを示していません。

エラーを再現する 1 つの方法は次のとおりです。

# in suchandsuch/bot.py

class LaLaLa():
    def __init__(self):
        self.donenow = 0
        print "LaLaLa() initialized."
        #  don't need a `return` here

def start(self):
    pages = bot.cats_recursive('something')
    for page in pages:
        self.process_page(page)

bot = LaLaLa()

それはただ一つです。もう1つは、__init__.py次のようなものを含めることです。

bot = LaLaLa()

私が言ったように、エラーはコード構造にあります。

LaLaLa内のボットのIDを出力するか、pydbでエラーをcaptrueすると、ボットがy以外のLaLaLaのインスタンスであることがわかると思います(再度IDを確認してください)

于 2013-05-19T17:16:30.967 に答える