我正在制作一个从网站上抓取内容的小工具。一切正常,除了条件声明,它不会去 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 更改为 ,那么它可以正常工作,但这不行!
//修改 我现在通过在正则表达式搜索中删除组来排序所有内容。谢谢你们!
答案 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'