【问题标题】:SyntaxError in any() testany() 测试中的语法错误
【发布时间】:2015-05-27 10:36:51
【问题描述】:

我对 python 语法很陌生...在这种情况下如何使用 or 运算符?

为了检查文件是否以 '.txt' 或 '.sm3dump' 结尾,我尝试使用 any(),但出现 SyntaxError:

if any(filename.endswith('.txt'), filename.endswith('.sm3dump'))
                                                               ^
SyntaxError: invalid syntax

我做错了什么?

【问题讨论】:

  • 对于或运算符只需键入or。并在您的if 末尾添加一个:if filename.endswith('.txt') or filename.endswith('.sm3dump'): 你可以用谷歌快速找到这个...

标签: python python-3.x syntax-error any or-operator


【解决方案1】:

您使用两个参数调用了any()

any(filename.endswith('.txt'), filename.endswith('.sm3dump'))
#   <----- argument #1 ----->  <------- argument #2 ------->

...但它只需要一个,它必须是可迭代的(列表、元组等):

any([filename.endswith('.txt'), filename.endswith('.sm3dump')])
#   <-------------- one list with two elements -------------->

如果您想改用or,这很简单:

filename.endswith('.txt') or filename.endswith('.sm3dump')

使用any() 执行多个类似测试时的一个常见习惯用法是使用list comprehensiongenerator expression

any([filename.endswith(ext) for ext in ('.txt', '.sm3dump')])
#   <----------------- list comprehension ----------------->
any(filename.endswith(ext) for ext in ('.txt', '.sm3dump'))
#   <-------- generator expression (no brackets) -------->

虽然在这种情况下,您实际上可以向str.endswith() 提供一个字符串元组,它会检查它们:

filename.endswith(('.txt', '.sm3dump'))

无论您使用哪种测试,您都需要记住以冒号结束您的 if 语句:

if filename.endswith(('.txt', '.sm3dump')):
    # do something ...

【讨论】:

  • Eric:要发现 Zero 答案的最后一部分之类的内容,请在交互式提示下使用 help 以快速检查函数和类的签名和使用。特别是&gt;&gt;&gt; help(str.endswith) 以“后缀也可以尝试的字符串元组”结尾。
猜你喜欢
  • 1970-01-01
  • 2018-12-20
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多