你一定遇到过Python中的无效语法,常见原因和解决办法

前言Python以其简单的语法而闻名 。 然而 , 当您第一次学习Python时 , 或者当您具有另一种编程语言的坚实背景时 , 您可能会遇到一些Python不允许的事情 。 如果您在尝试运行Python代码时收到过SyntaxError错误 , 那么本指南可以帮助您 。 在本教程中 , 您将看到Python中常见的无效语法示例 , 并学习如何解决这个问题 。
在本教程结束时 , 您将能够:

  • 识别Python中的无效语法
  • 理解SyntaxError回溯
  • 解析无效语法或完全阻止它

你一定遇到过Python中的无效语法,常见原因和解决办法文章插图
Python中的无效语法当您运行Python代码时 , 解释器将首先解析它 , 将其转换成Python字节码 , 然后执行 。 解释器将在程序执行的第一阶段(也称为解析阶段)中发现Python中的任何无效语法 。 如果解释器不能成功地解析您的Python代码 , 那么这意味着您在代码的某个地方使用了无效的语法 。 解释器将尝试向您显示错误发生的位置 。
当您第一次学习Python时 , 得到一个SyntaxError可能会令人沮丧 。 Python将尝试帮助您确定无效语法在代码中的位置 , 但是它提供的回溯可能会让您感到有些困惑 。 有时 , 它所指向的代码是完全正确的 。
您不能像处理其他异常一样处理Python中的无效语法 。 即使您尝试将try和except块封装到带有无效语法的代码中 , 您仍然会看到解释器抛出一个SyntaxError 。
你一定遇到过Python中的无效语法,常见原因和解决办法文章插图
SyntaxError异常和回溯当解释器在Python代码中遇到无效语法时 , 它将抛出一个SyntaxError异常 , 并提供一个带有一些有用信息的回溯 , 以帮助您调试错误 。 下面是一些Python中包含无效语法的代码:
# theofficefacts.py ages = {'pam': 24,'jim': 24'michael': 43 } print(f'Michael is {ages["michael"]} years old.')您可以在第4行字典的文字中看到无效的语法 。 第二个词条“jim”漏掉了一个逗号 。 如果你试着按原样运行这段代码 , 你会得到以下回溯结果:
$ python theofficefacts.pyFile "theofficefacts.py", line 5 'michael': 43^SyntaxError: invalid syntax注意 , traceback消息定位的错误在第5行 , 而不是第4行 。 Python解释器试图指出无效语法的位置 。 然而 , 它只能指出它最初注意到的问题 。 当您获得一个SyntaxError traceback , 并且traceback所指向的代码看起来很好 , 那么您将希望开始向后移动代码 , 直到您能够确定哪里出了问题 。
在上面的例子中 , 根据后面的内容 , 省略逗号是没有问题的 。 例如 , 第5行“michael”后面缺少逗号是没有问题的 。 但是一旦解释器遇到不理解的东西 , 它只能指出它发现的第一件不理解的事情 。
回溯是一个堆栈跟踪 , 从异常处理程序的点一直到调用链中的异常引发点 。 您还可以从调用的角度(并且没有错误的上下文)向上使用当前调用堆栈 , 这对于查找函数所遵循的路径非常有用 。
有几个元素的SyntaxError回溯 , 可以帮助您确定无效的语法在您的代码:
  • 遇到无效语法的文件名
  • 遇到问题的行号和代码的复写行
  • 在复制代码下面的行中有一个插入符号(^) , 它向您显示代码中有问题的那一点
  • 异常类型SyntaxError之后的错误消息 , 可以提供帮助您确定问题的信息
在上面的例子中 , 给出的文件名是theofficefacts 。 行号为5 , 插入符号指向字典键michael的结束引用 。 SyntaxError回溯可能不会指向真正的问题 , 但它将指向解释器无法理解语法的第一个地方 。
您可能会看到Python引发另外两个异常 。 它们等价于SyntaxError , 但有不同的名称:
  1. IndentationError
  2. TabError
这些异常都继承自SyntaxError类 , 但它们是涉及缩进的特殊情况 。 当代码的缩进级别不匹配时 , 将引发IndentationError 。 当代码在同一文件中同时使用制表符和空格时 , 将引发一个制表符错误 。 在后面的小节中 , 您将进一步了解这些异常 。
常见的语法问题当您第一次遇到SyntaxError时 , 了解为什么会出现问题以及如何修复Python代码中的无效语法是很有帮助的 。 在下面的小节中 , 您将看到可能引发SyntaxError的一些更常见的原因 , 以及如何修复它们 。
1.误用赋值运算符(=)
在Python中有几种情况下 , 您不能对对象进行赋值 。 一些例子是分配文字和函数调用 。 在下面的代码块中 , 您可以看到一些尝试这样做的示例和由此产生的SyntaxError回溯: