25

Eclipseで(PyDevを使用して)以下を実行しようとしていますが、エラーが発生し続けます:

q = queue.Queue(maxsize = 0)NameError:グローバル名'queue'が定義されていません

ドキュメントを確認したところ、そのように配置されているようです。ここで何かが足りませんか?それはPyDevがどのように機能するかですか?またはコードに何かが欠けていますか?すべての助けをありがとう。

from queue import *

def worker():
    while True:
        item = q.get()
        do_work(item)
        q.task_done()

def main():

    q = queue.Queue(maxsize=0)
    for i in range(num_worker_threads):
         t = Thread(target=worker)
         t.daemon = True
         t.start()

    for item in source():
        q.put(item)

    q.join()       # block until all tasks are done

main()

使用:Eclipse SDK

バージョン:3.8.1ビルドID:M20120914-1540

およびPython3.3

4

5 に答える 5

27

あなたがやる

from queue import *

これにより、モジュールからすべてのクラスがqueueすでにインポートされます。その行をに変更します

q = Queue(maxsize=0)

注意:「ワイルドカードのインポート(import *から)は、名前空間にどの名前が存在するかが不明確になり、リーダーと多くの自動ツールの両方を混乱させるため、避ける必要があります。」Python PEP-8

別の方法として、次のものを使用できます。

from queue import Queue

q = Queue(maxsize=0)
于 2013-01-29T14:16:02.110 に答える
7

それはあなたが使用しているからです:from queue import *

そして、あなたは使用しようとしています:

queue.Queue(maxsize=0) 

すべての属性を現在の名前空間にインポートするため、queueパーツを削除します。from queue import *

Queue(maxsize=0) 

またはimport queueの代わりに使用しfrom queue import *ます。

于 2013-01-29T14:16:13.017 に答える
1

インポートする場合、from queue import *これは、インポートするすべてのクラスと関数が完全にコーディングすることを意味します。したがって、モジュールの名前を書くのではなく、単にq = Queue(maxsize=100)。ただし、モジュールの名前を持つクラスを使用する場合は、q = queue.Queue(maxsize=100)別のインポート文字列を記述します。import queueこれは、最初の場合のすべての関数だけでなく、すべての関数を含むすべてのモジュールをインポートすることを意味します。

于 2017-07-13T19:21:17.877 に答える
0

コードの名前が別のqueue.py名前に変更されていないことを確認してください。ファイル名がqueue.pyの場合、同じファイルを検索しようとします。

于 2020-07-24T09:55:58.157 に答える
-5

昆布はpipinstallkombuでインストールできます

次に、キューをインポートします。

昆布インポートキューから

于 2016-07-24T00:15:57.683 に答える