簡體   English   中英

的Python-我的課引發ValueError,但不是由

[英]Python - My class raise ValueError, but it is not handled by except

我的示例代碼:

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由第二個類引發,但沒有由第一類的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

我該如何正確處理?

謝謝,

嘗試這個

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!!"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM