0

Pythonでクラスデータメンバーを理解するために次のコードを実行しようとしていますが、StopIterationエラーがスローされています。

class PizzaShop():
    pizza_stock = 10
    def get_pizza(self):
        while not PizzaShop.pizza_stock:
            PizzaShop.pizza_stock -= 1
            yield "take yours pizza order, total pizzas left {}".format(PizzaShop.pizza_stock)

mypizza_shop = PizzaShop()
pizza_order = mypizza_shop.get_pizza() 
print "{}".format(repr(pizza_order.next()))

最初にいくつかのメッセージを出力し、次に例外を出力する必要があることを期待しています

出力:

Traceback (most recent call last):
File "/home/scott/pythonfiles/core_python/pizza.py", line 10, in <module>
print "{}".format(repr(pizza_order.next()))
StopIteration
4

1 に答える 1

3

問題はこの行です

while not PizzaShop.pizza_stock:

これは、pizza_stock がゼロ以外の場合、すぐに停止します。それはいつもです。あなたはおそらく書くつもりでした

while PizzaShop.pizza_stock:

とにかく、Python での値、クラスなどの動作の詳細を知りたい場合は、 docsを確認してください。Java とは大きく異なります。

PS以下はstr.formatreprを呼び出すための省略形を持っているので不要です。また、魔法のメソッドなど.nextを直接呼び出すべきではありません。next()代わりにビルトインを使用してください。

print "{}".format(repr(pizza_order.next()))

する必要があります

print "{!r}".format(next(pizza_order))
于 2013-09-12T05:23:52.943 に答える