0

我正在制作一个从网站上抓取内容的小工具。一切正常,除了条件语句,它不会去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更改为if,它会起作用,但这不起作用!

//edit 我现在通过删除正则表达式搜索中的组来对所有内容进行排序。感谢你们!

4

3 回答 3

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'
于 2013-07-30T04:45:25.157 回答
1

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

当您从 elif 生成 if 时,它会生成不同的语句,并且当第一个条件为 True 时,它​​还会检查大小写。

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

如果您从未见过 False-True,那么没有达到 elif 也就不足为奇了。

A = cond1
B = cond2
print A, B
if A:
   something
elif B:
   something2
于 2013-07-30T03:55:13.913 回答
1

请在此处使用“不起作用”一词更准确一些。什么不起作用?语法错误?逻辑错误?

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

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

你在一个forwhile循环中运行它吗?否则你根本不需要break

和线

else:
   pass;

只是多余的,可以省略。

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

于 2013-07-30T03:55:22.850 回答