【问题标题】:Python - if or if invalid syntax errorPython - 如果或如果无效语法错误
【发布时间】:2015-03-25 14:58:20
【问题描述】:

我在 Python 中有以下代码行:

if (sheet1.cell_value(i,8).lower()==sheet2.cell_value(0,j).lower() or (if hasattr(sheet2.cell_value(2,j), 'lower'): if sheet1.cell_value(i,8).lower()==sheet2.cell_value(2,j).lower())):

我目前收到SyntaxError: invalid syntax 错误

我尝试使用orif 语句的原因是,sheet2.cell_value(2,j) 在 Excel 中可能没有值(在这种情况下它将是 #VALUE!)。因此,只有在单元格中有值的情况下才必须评估 or sheet1.cell_value(i,8).lower()==sheet2.cell_value(2,j).lower())): 中的第二个 if。我该如何解决这个问题?谢谢

【问题讨论】:

  • 您显然有括号问题,但是,您希望中​​间的冒号做什么?
  • 什么意思?你可以说得更详细点吗?我认为您需要 Python 中 ifs 中的 :...
  • 考虑发布一个我们可以运行的简单示例...您经常以这种方式回答自己的问题。例如if True or if False: pass 很好地说明了这个问题。

标签: python syntax syntax-error


【解决方案1】:

首先,稍微格式化一下不会有什么坏处。您不必将if 语句粉碎到一行。此外,您现在拥有它的方式 无效。将您的 ifs 分成不同的行

其次,你有括号问题。目前,括号跨越语句(通过冒号)。

这个块对齐括号。我删除了围绕整个声明的那些。相反,我们有您的第一个 or 条件。如果计算结果为 True,那么我们会进行第二次相等性检查。如果通过了,您的其余逻辑将进入该块。

if sheet1.cell_value(i,8).lower()==sheet2.cell_value(0,j).lower() or  hasattr(sheet2.cell_value(2,j), 'lower'): 
    if sheet1.cell_value(i,8).lower()==sheet2.cell_value(2,j).lower():
        # Do stuff here

【讨论】:

  • 我仍然收到您的代码错误:if sheet1.cell_value(i,8).lower()==sheet2.cell_value(0,j).lower() or (if hasattr(sheet2.cell_value(2,j), 'lower')): ^ SyntaxError: invalid syntax
  • @adrCoder,我错过了另一个if。检查更新以查看。您需要删除or (if...),使其只有or hasattr(...)
【解决方案2】:

在 Python 中禁止写入 (if ...)if ...: if ...。如果你想写“condition1,并且,如果那是真的,还有condition2”,只需写condition1 and condition2(在这种情况下,如果condition1 为假,condition2 将不会被评估)。因此:

if (sheet1.cell_value(i,8).lower()==sheet2.cell_value(0,j).lower() or (hasattr(sheet2.cell_value(2,j), 'lower') and sheet1.cell_value(i,8).lower()==sheet2.cell_value(2,j).lower())):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多