2015-03-24 5 views
-1

Я довольно новичок в синтаксисе python ... как использовать оператор or в этом сценарии?SyntaxError in any() test

Чтобы проверить, если файлы заканчиваются либо «.txt» или «» .sm3dump, я пытался использовать any(), но я получил SyntaxError:

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

Что я сделал не так?

+5

Для оператора просто введите 'или'. И поставьте ':' в конце вашего 'if'. 'if filename.endswith ('. Txt') или filename.endswith ('. Sm3dump'):' вы можете быстро найти это с помощью google, хотя ... – swenzel

ответ

4

Вы называли 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 comprehension или generator 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 ... 
+1

Eric: Чтобы обнаружить такие вещи, как последняя часть ответа Zero, используйте 'help' в интерактивном приглашении для быстрой проверки подписи и использования функций и классов. В частности, '>>> help (str.endswith)' заканчивается с "суффикс также может быть кортежем строк, чтобы попробовать". –

 Смежные вопросы

  • Нет связанных вопросов^_^