在或运算符后面有换行符时出现语法错误

时间:2016-08-22 04:25:25

标签: python

没关系:

if 'something' in data['meta']:
  <do something>

这是语法错误。为什么呢?

if ('something' in data['meta']) or
  ('something_else' in data['meta']):
    <do something>

口译员解决了这个问题:

  File "test.py", line 1
    if ('something' in data['meta']) or
                                      ^
SyntaxError: invalid syntax

4 个答案:

答案 0 :(得分:9)

换行很重要。 Python需要知道如何解析事物。对于第二个代码片段,您将if分成两行,而Python并不喜欢它,因为它看起来像一个单独的命令。跨越多行的两种常用方法是使用反斜杠或括号。例如,这两个都是有效的语法:

if ('something' in data['meta']) or \
       ('something_else' in data['meta']):
    <do something>

if (('something' in data['meta']) or
       ('something_else' in data['meta'])):
    <do something>

您可以在PEP 8 Style Guide中了解更多信息。

小注释:我在多行if语句上添加额外的缩进,以便在条件结束时和后续代码开始时轻松区分。它只是偏好,而PEP8提供了选项here

答案 1 :(得分:4)

这是一个语法错误,因为Python期望您的if语句在该行结束,并且:

然而,如果您要么

,那么这个布尔值的表达式可以继续到另一行
  • 以反斜杠(\)字符
  • 结束第一行
  • 将表达式包装在额外的括号中(首选)。

因此,使用

if ('something' in data['meta']) or \
       ('something_else' in data['meta']):
    <do something>

或首选表格

if (('something' in data['meta']) or
       ('something_else' in data['meta'])):
    <do something>

PEP 8 -- Style Guide for Python Code says

  

首选包装长行的方法是在括号,括号和大括号内使用 Python隐含的行延续。长行可以在多行中分解通过将表达式包装在括号中。这些应该优先使用反斜杠来继续行。

答案 2 :(得分:0)

从&#34;或&#34;中断线应该用括号括起来:

if ('something' in data['meta'] or
    'something_else' in data['meta']):
    <do something>

答案 3 :(得分:-1)

尝试这样的代码:

if ('something' in data['meta']) or ('something_else' in data['meta']):
    <do something>