【问题标题】:Python if, elif, else does not run if, elif, or else statementPython if、elif、else 不运行 if、elif 或 else 语句
【发布时间】:2017-07-03 14:46:11
【问题描述】:

我在方法中使用了 if、elif、else 语句。当我运行代码时,它不会运行 if、elif 或 else,但是当我注释掉 elif 语句时,它会按预期默认为 else。

    def message(response):
        args.pop(0)
        if com_text == "trivia":
            # triviaActive will be False
            if triviaActive:
                # Performs action
                return True
            # args[0].lower() is not equal to 'start'
            elif args[0].lower() == "start" and not triviaActive:
                # Performs action
                return True
            # So it should defaults to this else
            else:
                # Performs action
                return True

我在 if、elif 和 else 语句链上方添加了一些 cmets,这给了我意想不到的结果。在这种情况下,它不会默认使用 else 语句,它只是从方法返回而不运行方法的其余部分。我什至尝试在 if、elif 和 else 语句中使用 print 语句,但程序不运行它们。

(编辑) 我简化了我的 if、elif 和 else。即使使用这个简化版本,我的 elif 仍然存在问题。另外我想提一下,我使用 pop 方法从 args 中弹出一个值并使其为空,这可能是问题所在。

【问题讨论】:

  • 你检查你的缩进了吗?似乎最后一个 elifelse 比需要缩进一个标签。
  • @GeorgeBou 我检查了缩进,没关系。使用 pycharm,所以看起来不像是语法或缩进问题。
  • 也可能是您在缩进中混合了空格和制表符。 Python 2 将制表符解释为等效于 8 个空格,如果您的编辑器以不同方式显示它们(例如,等效于 4 个空格),这可能会非常混乱。在 Python 3 中,不允许在代码的同一部分混合制表符和空格,因此可能应该将您的代码修复为仅使用其中一个(并且可能将您的编辑器配置为将来仅使用其中一个) .
  • @Blckknght 感谢您的建议。我检查了我的设置并更改了它,但它不起作用。我相信这与我的 elif 语句中的“args [0]”有关。当我用实际字符串替换它并将其与“开始”进行比较时,它起作用了。
  • 你应该strip() args[0]

标签: python python-2.7 if-statement


【解决方案1】:

通过替换来测试代码

com_text == "trivia":

True:

如果不成立,您的任何条件都不会运行。

如果更改后一切正常,则可能是您的编辑器不喜欢您的空行间距。作为完整性检查,删除空行并查看它是否按预期工作(如果空行没有适当的缩进,并且您的空行上似乎没有缩进,某些编辑器可能无法工作)。

【讨论】:

  • 测试了一下,结果还是一样。我相信这与我的“args [0]”有关。当我用实际的字符串替换它时,它起作用了。现在想弄清楚为什么。