是否有一种巧妙的方法可以在try块中使用multiply命令,这样它就可以在一个命令产生错误时立即尝试每一行而不停止?
基本上我想替换它:
try:
command1
except:
pass
try:
command2
except:
pass
try:
command3
except:
pass
用这个:
try all lines:
command1
command2
command3
except:
pass
定义一个列表以便我可以循环执行命令似乎是一个糟糕的解决方案
答案 0 :(得分:4)
我说这是一种设计气味。沉默错误通常是一个坏主意,特别是如果你沉默了许多错误。但我会给你怀疑的好处。
您可以定义一个包含try/except
块的简单函数:
def silence_errors(func, *args, **kwargs):
try:
func(*args, **kwargs)
except:
pass # I recommend that you at least log the error however
silence_errors(command1) # Note: you want to pass in the function here,
silence_errors(command2) # not its results, so just use the name.
silence_errors(command3)
这种方法看起来很干净,但你需要不断地在任何地方重复silence_errors
。
列表解决方案没有任何重复,但看起来有点糟糕,您无法轻松传递参数。但是,您可以从程序中的其他位置读取命令列表,这可能是有益的,具体取决于您正在做什么。
COMMANDS = [
command1,
command2,
command3,
]
for cmd in COMMANDS:
try:
cmd()
except:
pass
答案 1 :(得分:1)
除非我完全误解你,否则应该这样做:
try:
thing1
thing2
thing3
except:
pass
try
块可以包含任意数量的语句。
答案 2 :(得分:0)
实际上,你的第二选择就是你想要的帽子。一旦任何命令引发异常,它将一直到除外,并包括哪个异常的信息以及它发生的行。如果您愿意,您可以使用
捕获不同的异常并执行不同的操作try:
command1
command2
except ExceptionONe:
pass
except Exception2:
pass
except:
pass # this gets anything else.
答案 3 :(得分:0)
我使用不同的方式,使用一个新变量:
continue_execution = True
try:
command1
continue_execution = False
except:
pass
if continue_execution:
try:
command2
except:
command3
要添加更多命令,您只需添加更多这样的表达式:
try:
commandn
continue_execution = False
except:
pass
答案 4 :(得分:-1)
您可以在同一个except语句中除多个错误外。例如:
try:
cmd1
cmd2
cmd3
except:
pass
或者您可以创建一个函数并通过
传递错误和cmddef try_except(cmd):
try:
cmd
except:
pass
答案 5 :(得分:-1)
实际上,我认为他希望以更好的方式做到以下几点:
window.fill(white) # screen-cleaning should be done first
for i in range(500):
x = random.randint(10,500)
y = 1
uno = Drop(window , purple,x,y,speed)
rain.append(uno)
uno.fall() # changed