2

我有一个代表文件名的字符串,我怎样才能一次检查几个条件?我试过了

if r'.jpg' or r'.png' not in singlefile:

但一直得到误报。

4

4 回答 4

3

您的代码等于:

if (r'.jpg') or (r'.png' not in singlefile):

您可能正在寻找:

if r'.jpg' not in singlefile or r'.png' not in singlefile:

或者

if any(part not in singlefile for part in [r'.jpg', r'.png']):

感谢蒂姆·皮茨克:

他(你)实际上(可能)想要

if not any(singlefile.endswith(part) for part in [r'.jpg', r'.png'])
#                     ^^^^^^^^
于 2013-06-16T13:44:42.037 回答
2

这是因为优先级。以下代码表示。

# r'.jpg' is constant
if r'.jpg' or (r'.png' not in singlefile):

如果恒定,或者.png不在singlefile. 由于常量始终为真,因此表达式始终为真。

相反,您可以尝试使用正则表达式来检查任何字符串是否符合模式。

import re
if re.match(r"\.(?:jpg|png)$", singlefile):
于 2013-06-16T13:45:50.573 回答
1

您的问题在于您的逻辑 OR 正在检查一个常量和一个变量。

r'.png'

将始终评估为 True,从而使您or也为 True。

你必须检查两者,就像这样

if r'.png' not in singlefile or 'r.jpg'  not in singlefile:
    #do stuff
于 2013-06-16T13:51:28.863 回答
0

试试这个:

if r'.jpg' not in singlefile or r'.png' not in singlefile:
于 2013-06-16T13:51:00.643 回答