3

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

  1. 搜索特定字符串并执行一些步骤。(如果此操作失败,请转到步骤 b)
  2. 使用不同的代码搜索特定字符串并执行一些步骤。(如果此操作失败,请转到步骤 3)
  3. 使用不同的代码搜索特定字符串并执行一些步骤。

我正在这样做,我的问题是如果我必须尝试多次,如何指定 try 和 except。

try:   
    #step 1 

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

except:
    #step 3

谢谢

4

3 回答 3

8

结构将是

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

两个注意事项:

首先,虽然使用异常是一种非常“pythonic”的方式来完成任务,你应该检查一下,如果你不能使用嵌套的if//结构elifelse

其次,Python 标准库中有一个HTML Parser这个问题的答案中还有一些 HTML 到 DOM 解析器(即解析器从 HTML 文档中构造出 DOM 结构,如果这使您的任务更容易)。在编写自己的解决方案之前,您应该非常确定您不想使用现有的解决方案:) ...

于 2013-05-01T17:20:05.763 回答
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!

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

于 2013-05-01T17:31:08.083 回答
1

这似乎最好使用 if/elif:

if conditionA:
    # do something
elif conditionB:
    # do something else
elif conditionC:
    # do something completely different
else:
    # go cry in a room
于 2013-05-01T17:19:48.153 回答