【问题标题】:How to tackle SyntaxError in Python如何解决 Python 中的 SyntaxError
【发布时间】:2019-11-08 23:03:48
【问题描述】:

由于 Stack Overflow 上有很多关于 Python 中的 SyntaxError 的问题,我们可能想知道:

我们如何处理SyntaxError?有没有可以普遍应用的策略?

【问题讨论】:

标签: python syntax-error


【解决方案1】:

0。错误出现前:语法高亮和代码格式化

即使在遇到SyntaxError 之前,也有一些重要的测量值需要处理SyntaxErrors,因为处理SyntaxErrors 的最佳方法是首先避免它们。这首先可以通过使用编辑器或集成开发环境 (IDE) 来完成,该环境具有用于 Python 的 syntax highlighting

除此之外,我们可以通过良好的代码和格式样式来降低遇到SyntaxError 的风险。术语“良好的格式化风格”有一个正式的定义, PEP 8 -- Style Guide for Python Code。正确的格式使我们的代码更具可读性,从而降低了编写代码导致SyntaxError 的风险。

对我们的代码应用良好格式的一种非常好的方法是使用自动代码格式化工具。代码格式化程序具有多个优点,其中包括: 其代码格式化是一致的。它应用了您可能还没有想到的最佳实践。很方便。

对于 Python,black 是一个很棒的代码格式化工具。

1。了解错误信息

  1. 语法错误表明解释器在我们的代码中遇到了问题的文件和行。我们应该使用这些信息来查找错误。

  2. 我们应该知道,Python 解释器有时会在实际问题的 行中显示SyntaxError。这是因为解析器期望错误行中包含某些内容,并且只有在整行已被解析时才能识别出这部分内容丢失。这种SyntaxError 的原型示例是缺少括号。例如,以下代码在2 行中引发了SyntaxError,即使错误在1 行中:

bar = foo(
baz()
  1. EOL 代表“行尾”。这有助于理解非常常见的SyntaxError: EOL while scanning string literal。当您没有正确关闭带有右引号的字符串定义时,通常会出现这种情况,例如在以下示例中:
foo = "bar

2。简化代码

通常,一个好的错误修复策略是将任何引发错误或异常(或不返回预期输出)的代码减少到minimal example。 (这是对 Stack Overflow 上问题的要求,但不仅如此,它还是一种很好的解决 bug 的技术。)

SyntaxError 的情况下,生成一个最小示例通常非常容易,因为SyntaxError 不依赖于变量的任何值、对象的任何状态或代码的任何其他语义。这就是为什么SyntaxError 的来源通常是一行代码。

因此,为了识别错误,我们删除了除我们认为是错误来源的行之外的所有代码。如果错误消失,则它位于不同的行中。如果错误仍然存​​在,我们尝试简化这一行。例如,我们通过定义保存值的中间变量来替换嵌套括号:

而不是

bar = foo(foo(baz(foo()))

以下(逻辑等效)代码:

first = foo()
second = baz(first)
third = foo(second)
bar = foo(third

使我们更容易识别缺少的右括号。

【讨论】:

    【解决方案2】:

    请参阅文档。不幸的是,无法在 Try: except: 块中捕获语法错误,因此处理它们的唯一方法是阅读返回的消息,如果这没有帮助,请跟进 python 文档:

    https://docs.python.org/3/

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 2018-08-09
      • 1970-01-01
      • 2021-10-11
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多