我需要执行多个Python语句,其中很少一些可能在执行期间失败,即使在失败之后我也希望执行其余的语句。
目前,我正在做:
try:
wx.StaticBox.Destroy()
wx.CheckBox.Disable()
wx.RadioButton.Enable()
except:
pass
如果任何一个语句失败,except
将被执行并退出程序。但我需要的是即使它失败了它应该运行所有三个语句。
我怎样才能在Python中执行此操作?
答案 0 :(得分:6)
对要调用的方法使用for
循环,例如:
for f in (wx.StaticBox.Destroy, wx.CheckBox.Disable, wx.RadioButton.Enable):
try:
f()
except Exception:
pass
请注意,我们在这里使用except Exception
- 这通常比你想要的更有可能。
答案 1 :(得分:4)
如果在try
块期间发生异常,则跳过块的其余部分。您应该为三个单独的语句使用三个单独的try
子句。
在回复评论时添加:
由于您显然希望处理许多语句,因此可以使用包装器方法来检查异常:
def mytry(functionname):
try:
functionname()
except Exception:
pass
然后使用函数名称作为输入调用方法:
mytry(wx.StaticBox.Destroy)
答案 2 :(得分:-1)
我建议创建一个上下文管理器类来抑制任何异常和要记录的异常。
请查看下面的代码。会鼓励任何改进。
import sys
class catch_exception:
def __init__(self, raising=True):
self.raising = raising
def __enter__(self):
pass
def __exit__(self, type, value, traceback):
if issubclass(type, Exception):
self.raising = False
print ("Type: ", type, " Log me to error log file")
return not self.raising
def staticBox_destroy():
print("staticBox_destroy")
raise TypeError("Passing through")
def checkbox_disable():
print("checkbox_disable")
raise ValueError("Passing through")
def radioButton_enable():
print("radioButton_enable")
raise ValueError("Passing through")
if __name__ == "__main__":
with catch_exception() as cm:
staticBox_destroy()
with catch_exception() as cm:
checkbox_disable()
with catch_exception() as cm:
radioButton_enable()