gpt4 book ai didi

Python if/else 不起作用...不满足 if 条件,但 else 不执行

转载 作者:行者123 更新时间:2023-12-01 05:51:34 26 4
gpt4 key购买 nike

嗯。我想到了。事实证明,当 if 不应该匹配时,它并没有完全运行,那是因为 _s3_bucket.list(prefix=basename) = []。我对Python的信心又恢复了。 :)谢谢大家!

为什么这段代码从来不打印“不匹配”?当正则表达式匹配时,它会成功打印“matches”,但是当它不匹配时,它不会执行else。 print type(match)返回<type 'list'> .

object_regex = re.compile('%s\.(\d+)\.%s' % \
(re.escape('.'.join(basename.split('.')[:-2])),
re.escape(basename.split('.')[-1])))
for obj in _s3_bucket.list(prefix=basename):
match = object_regex.findall(obj.name)
print match //prints nothing when nothing is found. not even []
if match:
print "matches"
else:
print "doesnt match"

我也尝试过

if not match:
print "doesnt match"
else:
print "matches"

并且它也从不执行 if 。

打印输出(UPLOAD TO S3 在调用该函数时打印):

UPLOAD TO S3 /fonts/HelveticaNeueLTPro-Lt.1351206175.otf
[u'1351206175']
matches
UPLOAD TO S3 /fonts/HelveticaNeueLTPro-Bd.1351206175.otf
[u'1351206175']
matches
UPLOAD TO S3 /css/common.1357015625.css <-- what is going on here?
UPLOAD TO S3 /css/landing-style.1356896077.css
[u'1356896077']
matches

当我 print type(match)而不是print match我得到<type 'list'>每次,这让我相信匹配确实是一个空列表。但空列表应该可以做到这一点......

>>> match=[]
>>> if match:
... print "ASDF"
...
>>> if not match:
... print "asdf"
...
asdf

最佳答案

findall的返回值是一个列表。如果 RE 有组,那么根据文档,它可能包含不匹配的空组条目。由于您使用的是组,因此它可能会返回空元组的列表。但由于列表不为空,因此其计算结果为 True。无论如何。

为了显示这一点,请打印出 findall 的返回值。打印调试信息是常见的做法。这是我首先想到的。

或者

您的方法_s3_bucket.list(prefix=basename)不会返回任何要迭代的内容,并且会跳过整个循环 block 。它的输出是什么?

但是

我们无法真正判断,因为您动态构建 RE,并且我们不知道它到底是什么样子或它将匹配什么。

关于Python if/else 不起作用...不满足 if 条件,但 else 不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com