Python: 多个 try except 块合二为一?
Python: Multiple try except blocks in one?
有没有一种巧妙的方法可以在 try 块中使用多个命令,这样它基本上可以在一个命令产生错误时立即尝试每一行而不停止?
基本上我想替换这个:
try:
command1
except:
pass
try:
command2
except:
pass
try:
command3
except:
pass
有了这个:
try all lines:
command1
command2
command3
except:
pass
定义一个列表以便我可以循环执行命令似乎是一个糟糕的解决方案
其实你的第二选择就是你想要的帽子。一旦任何命令引发异常,它就会通过 except,并包括异常发生的信息和发生在哪一行的信息。如果你愿意,你可以捕捉不同的异常并用
做不同的事情
try:
command1
command2
except ExceptionONe:
pass
except Exception2:
pass
except:
pass # this gets anything else.
您可以排除同一个错误中的多个错误,except statement.For 示例:
try:
cmd1
cmd2
cmd3
except:
pass
或者你可以创建一个函数并通过
传递错误和命令
def try_except(cmd):
try:
cmd
except:
pass
我会说这是一种设计味道。屏蔽错误通常不是一个好主意,尤其是当您屏蔽了很多错误时。但我会给你怀疑的好处。
您可以定义一个包含 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
其实我觉得他想要更好的方式:
try:
command1
except:
try:
command2
except:
try:
command3
except:
pass
我使用不同的方式,使用一个新变量:
continue_execution = True
try:
command1
continue_execution = False
except:
pass
if continue_execution:
try:
command2
except:
command3
要添加更多命令,您只需添加更多表达式,如下所示:
try:
commandn
continue_execution = False
except:
pass
有没有一种巧妙的方法可以在 try 块中使用多个命令,这样它基本上可以在一个命令产生错误时立即尝试每一行而不停止?
基本上我想替换这个:
try:
command1
except:
pass
try:
command2
except:
pass
try:
command3
except:
pass
有了这个:
try all lines:
command1
command2
command3
except:
pass
定义一个列表以便我可以循环执行命令似乎是一个糟糕的解决方案
其实你的第二选择就是你想要的帽子。一旦任何命令引发异常,它就会通过 except,并包括异常发生的信息和发生在哪一行的信息。如果你愿意,你可以捕捉不同的异常并用
做不同的事情try:
command1
command2
except ExceptionONe:
pass
except Exception2:
pass
except:
pass # this gets anything else.
您可以排除同一个错误中的多个错误,except statement.For 示例:
try:
cmd1
cmd2
cmd3
except:
pass
或者你可以创建一个函数并通过
传递错误和命令def try_except(cmd):
try:
cmd
except:
pass
我会说这是一种设计味道。屏蔽错误通常不是一个好主意,尤其是当您屏蔽了很多错误时。但我会给你怀疑的好处。
您可以定义一个包含 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
其实我觉得他想要更好的方式:
try:
command1
except:
try:
command2
except:
try:
command3
except:
pass
我使用不同的方式,使用一个新变量:
continue_execution = True
try:
command1
continue_execution = False
except:
pass
if continue_execution:
try:
command2
except:
command3
要添加更多命令,您只需添加更多表达式,如下所示:
try:
commandn
continue_execution = False
except:
pass