尝试 - 除了python

时间:2013-05-01 17:17:04

标签: python

我目前正在尝试解析HTML页面。在这样做时,我必须执行

  1. 搜索特定字符串并执行一些步骤。 (如果此操作失败,请转到步骤b)
  2. 使用其他代码搜索特定字符串并执行一些步骤。 (如果此操作失败,请转到步骤3)
  3. 使用不同的代码搜索特定字符串并执行一些步骤。
  4. 我这样做,我的问题是如果我必须多次尝试,如何指定尝试和除外。

    try:   
        #step 1 
    
    except: #   ( not sure what kind of error will execute step2) 
        #step 2
    
    except:
        #step 3
    

    感谢

3 个答案:

答案 0 :(得分:7)

结构将是

try:
    step 1
except:
    try:
        step 2
    except:
        step 3

两个注释:

首先,尽管使用异常是完成任务的一种非常“pythonic”的方式,但如果您不能使用嵌套的if / elif / else结构,则应该检查。

其次,Python标准库中有HTML Parser权限。 This question在答案中也有一些HTML解析器(即,从HTML文档中构造DOM结构的解析器,如果这样可以使您的任务更容易)。您应该非常确定想要在编写自己的解决方案之前使用现有的解决方案:) ...

答案 1 :(得分:4)

我同意BlackVegetable这可能是用一个简单的if / elif来完成的,但是如果你有特殊的理由想要使用异常,你可以这样做:

for method in (method1, method2, method3):
    try:
        return method(parameter)
    except VerySpecificException as _:
        pass

作为一个更完整的例子:

def method1(param):
    raise Exception('Exception: method 1 broke')

def method2(param):
    raise Exception('Exception: method 2 broke')

def method3(param):
    print param

def main():
    param = 'success!'
    for method in (method1, method2, method3):
        try:
            return method(param)
        except Exception as e:
            print e
if __name__ == '__main__':
    main()

打印:

Exception: method 1 broke
Exception: method 2 broke
success!

如果第一个方法中的任何一个没有中断,那么这些方法将返回成功并且循环将结束。

答案 2 :(得分:1)

这似乎最好使用if / elif:

if conditionA:
    # do something
elif conditionB:
    # do something else
elif conditionC:
    # do something completely different
else:
    # go cry in a room