使用Pyside / Qt推荐的错误处理(try / catch或exception)

时间:2012-03-07 18:57:37

标签: python qt pyside

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

由于

编辑:感谢您的评论。我正在寻找一些关于在考虑用户输入时代码中最佳方法的建议。一个例子:

        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 个答案:

答案 0 :(得分:1)

假设我理解你的问题......

通常,抛出异常不是一个好主意,因为用户没有选中右侧框。例如,更好的做法是弹出一个消息框,要求用户重新输入信息。这意味着查看输入的内容并检查其是否有效(根据您应用的规则)。但是,当涉及异常时,python相当强大。 nan不会导致崩溃和烧毁,它只会导致抛出异常,将打印回溯并且控制将返回到您的应用程序。

简而言之,不要因为用户输入错误而抛出异常。而是检查输入并适当地响应它。 E.g:

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