0

私のサンプルコード:

from tkinter import *

class first:
    def __init__(self):
        self.top = Tk()
        ...
    def test(self):
        try:
            self.value = self.dict[key]
        except KeyError:
            try:
                second()
            except ValueError:
                print('Finally')

class second:
    def __init__(self):
        self.frame = Toplevel()
        ...
        self.button = ttk.Button(parent=self.frame, text='GO', command=self.go_click)
        ...

    def go_click(self):
        raise ValueError('Not Valid')

それはほんの一例です!問題は、ValueError が 2 番目のクラスによって発生することですが、最初のクラスの except 句では処理されません。トレースバックの下:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1487, in __call__
    return self.func(*args)
File "........", line xxx, in goclick
    raise ValueError('Not Valid')
ValueError: Not Valid

どうすれば適切に処理できますか?

ありがとう、

4

1 に答える 1

-1

これを試して

from tkinter import *

class first:
    def __init__(self):
        self.top = Tk()
        ...
    def test(self):
        try:
            self.value = self.dict[key]
        except KeyError:
            try:
                second()
            except ValueError:
                print('Finally')
            print "OK CALLED SECOND()!!!!" #######THIS PRINT MEANS YOUR DONE HERE

class second:
    def __init__(self):
        self.frame = Toplevel()
        ...
        self.button = ttk.Button(parent=self.frame, text='GO', command=self.go_click)
        ...

    def go_click(self):
        raise ValueError('Not Valid')

そのエラーを実際に処理するには、tkinters イベント ループをオーバーライドする必要があります ... 非常に簡単ではありません (または、一般的に良い方法です)。

それを行うより良い方法は、go_click関数自体のエラーを次のように処理することです

  def go_click(self):
      try:
         self.submit_form()
      except ValueError:
         print "VALIDATION ERROR!!"
于 2015-02-10T18:00:46.263 に答える