上手。私はそれを考え出した。一致するはずのないifが正確に実行されないことが判明しました。これは、_s3_bucket.list(prefix=basename)
=[]が原因です。Pythonへの信頼が回復しました。:) 皆さん、ありがとうございました!
このコードスニペットが「一致しない」と表示されないのはなぜですか?正規表現が一致すると、「一致」が正常に出力されますが、一致しない場合は、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のどちらかを実行することはありません。
Printout(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