Python如果... elif ... else语句出错?

时间:2013-07-30 03:44:39

标签: python loops python-2.7 if-statement

我正在制作一个从网站上抓取内容的小工具。一切正常,除了条件声明,它不会去 elif 声明,有人能告诉我什么错误吗?

res = opener.open(req)
validate = res.read()
if bool(re.search(r'content-wraper', validate, re.DOTALL).group(0)) == True:
    print 'validated successful, start writing content'
    f = open('save.txt', 'a')
    f.write(content)
    f.close()
elif bool(re.search(r'from this ip', validate, re.DOTALL).group(0)) == True:
    print 'Warning, IP block detected'
    break;
else:
    pass;

如果我删除了 if 语句并将 elif 更改为 ,那么它可以正常工作,但这不行!

//修改 我现在通过在正则表达式搜索中删除组来排序所有内容。谢谢你们!

3 个答案:

答案 0 :(得分:1)

最有可能的是,第二个条件不满足,但第一个条件满足时。 if-elif的逻辑是,如果同一语句的所有先前条件都为False,则elif将被执行,但其条件为True。

当您从elif中创建if时,它会生成不同的语句,并在第一个条件为True时检查案例。

在不知道所需逻辑的情况下很难帮助解决这个问题,但澄清情况的一种方法是在任何IF之前将条件置于变量中并打印两个条件。

如果你从未见过False-True,那么就不会出现意外事件。

A = cond1
B = cond2
print A, B
if A:
   something
elif B:
   something2

答案 1 :(得分:1)

请注意这里的术语“不起作用”。什么不起作用?语法错误?逻辑错误?

也许我们可以开始清理你的代码......

另外,您可以在break;pass;之后删除分号,但在Python中不需要它们。

您是在for还是while循环中运行此操作?否则,您根本不需要break

和行

else:
   pass;

只是多余的,可以省略。

我不确定我是否理解正确,但你想要一个接一个地执行:if子句然后elif?如果你试图做这样的话,这是不可能的。在这种情况下,为什么不使用2 if s?

答案 2 :(得分:1)

正则表达式对于这种情况来说是过度的。此外,使用with将确保req被正确清理。

此代码更容易阅读。

with opener.open(req) as res;
    validate = res.read()
    if 'content-wrapper' in validate:
        print 'validated successful, start writing content' 
        with open('save.txt', 'a') as f
            f.write(content)
    elif 'from this ip' in validate:
        print 'Warning, IP block detected'