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