0

ボタンのリスナーとして機能し、このボタンの上のいくつかのフィールドが入力されているかどうかを評価するコードがあります。

def goListener(self):
    if all( [self.nme.get() != "", self.dsc.get() != "", self.imp.get != ""] ):
        name = self.nme.get()
        desc = self.dsc.get()
        while True:
            try:
                imp = int(self.imp.get())
                break
            except:
                imp = int(self.imp.get())

さまざまなフィールドが入力されているか、それ以外の場合にこのプログラムを実行すると、正しく取得され、 nme と dsc が入力されているが imp が入力されていない場合を除いて、すべての組み合わせでエラーメッセージが表示されます。これにより、エラーメッセージが生成されます。

Traceback (most recent call last):
  File "C:\Python33\lib\tkinter\__init__.py", line 1442, in __call__
    return self.func(*args)
  File "C:\Python33\todo.py", line 68, in goListener
    imp = int(self.imp.get())
ValueError: invalid literal for int() with base 10: ''

ちなみに、これは実行すべきではない except ブロックを実行しています。これは評価に問題があるのでしょうか、それとも何か不足していますか?

4

2 に答える 2

4

あなたが持っている:

self.imp.get != ""

.get()メソッドの呼び出しに失敗しています。試す:

self.imp.get() != ""
于 2013-03-18T21:41:18.020 に答える
3

エラーがスローされた場合、ブロックimp = int(self.imp.get())の外で再度呼び出すと、同じエラーがスローされます。try

exceptブロックは、例外が発生したときに実行する必要があるコード用です。

        try:
            imp = int(self.imp.get())
            break
        except:
            print "Something bad happened"
于 2013-03-18T21:39:22.897 に答える