2012-03-07 18 views
1

我正在开发一个来自科学背景的Pyside/Qt应用程序。 Pyside的try/catch错误的最佳做法是什么?例如,如果有几个QCheckBox,如果没有选中任何一个框,处理错误的最佳方法是什么?使用Pyside/Qt推荐的错误处理(try/catch或exceptions)

谢谢

编辑:谢谢你的意见。我正在考虑在考虑用户输入时代码中最好的方法。举个例子:

 if self.main_frame.LRadioButton.isChecked(): 

      if self.main_frame.RadioButton2.isChecked(): 
       print 'clicked' 
      else: 
       print 'no button selected!' 

     elif self.main_frame.TRadioButton.isChecked(): 

      if self.main_frame.RadioButton3.isChecked(): 

       print 'clicked' 
      else: 
       print 'No button selected!' 
     else: 
      print 'no button selected, top level' 

因此,有可能用户会尝试做进一步的动作,而无需由程序给出的可能性至少一个选择。应该做些什么来处理“无按钮选择”部分?抛出异常?用手抓住所有事件?

希望现在很清楚。

再次感谢!

+1

的问题是过于宽泛,而且我不知道对方的问题。 – 2012-03-07 19:42:41

+0

是的,问题很广泛。让我试着重新修改它:如果用户输入导致一个nan,应用程序是否会崩溃并刻录,让操作系统处理它,或者使用try/catch之类的东西?如果是后者,Pyside/Qt的适当行为是什么?我应该自己检查nan/inf/etc的所有用户输入吗? – Ivan 2012-03-07 20:07:15

+2

这个问题仍然非常广泛,首先,这听起来像是一个你应该问自己的问题。如果用户输入'nan'或'inf'输入,应用程序应该做什么? 'math.isnan'和'math.isinf'函数可能派上用场。确保你编辑你的问题以更新信息。评论不会让你的问题重演。 – Darthfett 2012-03-07 20:15:05

回答

1

假设我明白你的问题......

一般来说是不会抛出异常,因为用户没有检查右边框是一个好主意。例如,更好的做法是弹出一个消息框,要求用户重新输入信息。这意味着查看输入内容并检查其有效性(根据您应用的任何规则)。但是,在涉及异常时,python相当健壮。一个nan不会导致崩溃和烧伤,它只会导致异常被抛出,回溯将被打印出来,控制权将返回到您的应用程序。

总之,不要因为用户输入错误而抛出异常。相反,请检查输入并对其作出适当的响应。例如:

while denominator == 0: 
    QMessageBox('Invalid values (probably denominator). Please re-enter') 
result = numerator/denominator 

注意捕捉的例外可能是这样做的最简单的方法,如果检查是太复杂了:

while not can_continue: 
    try: 
     result = complex_maths_involving_division(a, b, c) 
    except ZeroDivisionError: 
     QMessageBox('Invalid values resulting in zero division. Please re-enter') 
    else: 
     can_continue = True