Python:多次尝试除了一个块?

use*_*943 6 python try-catch except

有没有一种巧妙的方法可以在 try 块中使用乘法命令,以便它基本上尝试每一行而不会在一个命令产生错误时立即停止?

基本上我想替换这个:

try:
   command1
except:
   pass
try:
   command2
except:
   pass
try:
   command3
except:
   pass
Run Code Online (Sandbox Code Playgroud)

有了这个:

try all lines:
  command1
  command2
  command3
except:
  pass
Run Code Online (Sandbox Code Playgroud)

定义一个列表以便我可以遍历命令似乎是一个糟糕的解决方案

Col*_*Two 5

我会说这是一种设计气味。消除错误通常是一个坏主意,特别是如果您要消除很多错误。但我会给你怀疑的好处。

您可以定义一个包含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)
Run Code Online (Sandbox Code Playgroud)

这有效并且看起来相当干净,但是您需要不断地silence_errors在任何地方重复。

list 解决方案没有任何重复,但看起来有点糟糕,您无法轻松传入参数。但是,您可以从程序中的其他位置读取命令列表,这可能会有所帮助,具体取决于您在做什么。

COMMANDS = [
    command1,
    command2,
    command3,
]

for cmd in COMMANDS:
    try:
        cmd()
    except:
        pass
Run Code Online (Sandbox Code Playgroud)