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

时间:2015-06-15 17:23:10

标签: python try-catch except

是否有一种巧妙的方法可以在try块中使用multiply命令,这样它就可以在一个命令产生错误时立即尝试每一行而不停止?

基本上我想替换它:

try:
   command1
except:
   pass
try:
   command2
except:
   pass
try:
   command3
except:
   pass

用这个:

try all lines:
  command1
  command2
  command3
except:
  pass

定义一个列表以便我可以循环执行命令似乎是一个糟糕的解决方案

6 个答案:

答案 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

或者您可以创建一个函数并通过

传递错误和cmd
def 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