专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

syntaxerror语法错误常见问题及解决办法

来源:小易整编  作者:小易  发布时间:2023-02-24 04:42
摘要:syntaxerror语法错误常见问题及解决办法Python以其简单的语法而闻名。然而,当您第一次学习Python时,或者当您具有另一种编程语言的坚实背景时,您可能会遇到一些Python不允许的事情。如果您在尝试运行Python代码时收到过...

# missing.py def foo():    return [1, 2, 3 print(foo())

当你运行这段代码时,你会被告知调用print()有一个问题:

$ python missing.py  File "missing.py", line 5    print(foo())        ^ SyntaxError: invalid syntax

这里发生的是Python认为列表包含三个元素:1、2和3 print(foo())。Python使用空格从逻辑上对事物进行分组,因为从print(foo())中没有逗号或括号分隔3,所以Python将它们集中在一起作为列表的第三个元素。

另一种变化是在列表的最后一个元素后面添加一个逗号,同时仍然去掉右方括号:

# missing.py def foo():    return [1, 2, 3, print(foo())

现在你得到了一个不同的回溯:

$ python missing.py  File "missing.py", line 6                ^ SyntaxError: unexpected EOF while parsing

在前面的例子中,3和print(foo())被集中在一起作为一个元素,但是在这里你可以看到一个逗号将两者分开。现在,print(foo())的调用被添加为列表的第四个元素,Python到达了文件的末尾,但没有使用右括号。回溯告诉您,Python已经到达了文件(EOF)的末尾,但是它还在期待其他内容。

在本例中,Python希望有一个右括号(]),但是重复的行和插入符号没有多大帮助。缺少括号和方括号是Python很难识别的。有时,您唯一能做的就是从插入符号开始,然后向后移动,直到您能够识别出缺失或错误的地方。

04
字典语法错误

您在前面已经看到,如果将dictionary元素中的逗号去掉,可能会得到SyntaxError。Python字典的另一种无效语法形式是使用等号(=)来分隔键和值,而不是冒号:

>>>

>>> ages = {'pam'=24}  File "<stdin>", line 1    ages = {'pam'=24}                 ^ SyntaxError: invalid syntax

同样,这个错误消息不是很有用。但是,重复的行和插入符号非常有用!他们直接指向问题人物。

如果您将Python语法与其他编程语言的语法混淆,那么这种类型的问题很常见。如果将定义字典的行为与dict()调用相混淆,也会看到这种情况。要解决这个问题,可以用冒号替换等号。你也可以切换到使用dict():

>>>

>>> ages = dict(pam=24) >>> ages {'pam': 24}

如果dict()语法更有帮助,那么可以使用它来定义字典。

05
使用错误的缩进

SyntaxError有两个子类专门处理缩进问题:

  1. IndentationError

  2. TabError


其他编程语言使用花括号表示代码块,而Python使用空格。这意味着Python期望代码中的空白具有可预测性。如果代码块中有一行空格数错误,则会引发IndentationError:

1 # indentation.py 2 def foo(): 3     for i in range(10): 4         print(i) 5   print('done') 6 7 foo()

这可能很难看到,但是第5行只缩进了2个空格。它应该与for循环语句一致,也就是4个空格。幸运的是,Python可以很容易地发现这一点,并很快告诉您问题所在。

不过这里也有一点模糊。打印('done')行是打算在for循环之后还是在for循环块内部?当你运行上述代码,你会看到以下错误:

$ python indentation.py  File "indentation.py", line 5    print('done')                ^ IndentationError: unindent does not match any outer indentation level

虽然回溯看起来很像SyntaxError回溯,但它实际上是一个IndentationError。错误消息也非常有用。它告诉您行的缩进级别与其他任何缩进级别不匹配。换句话说,print('done')是缩进2个空格的,但是Python找不到任何其他匹配这种缩进级别的代码行。您可以通过确保代码行符合预期的缩进级别来快速修复此问题。

SyntaxError的另一种类型是TabError,只要有一行包含制表符或空格作为缩进,而文件的其余部分包含制表符或空格,就会看到TabError。这可能会隐藏起来,直到Python指出来!

如果制表符的大小与每个缩进级别中的空格数相同,那么看起来所有的行似乎都在同一级别上。然而,如果一行用空格缩进,另一行用制表符缩进,那么Python会指出这是一个问题:

1 # indentation.py 2 def foo(): 3     for i in range(10): 4         print(i) 5     print('done') 6 7 foo()

在这里,第5行是用制表符缩进的,而不是用4个空格。根据您的系统设置,这个代码块在您看来可能是完美的,也可能是完全错误的。

但是,Python会立即注意到这个问题。但在你运行代码,看看Python会告诉你什么是错误的之前,它可能会对你有帮助,看看在不同的标签宽度设置下的代码是什么样子的一个例子:

$ tabs 4 # Sets the shell tab width to 4 spaces $ cat -n indentation.py     1   # indentation.py     2   def foo():     3       for i in range(10)     4           print(i)     5       print('done')     6       7   foo() $ tabs 8 # Sets the shell tab width to 8 spaces (standard) $ cat -n indentation.py     1   # indentation.py     2   def foo():     3       for i in range(10)     4           print(i)     5           print('done')     6       7   foo() $ tabs 3 # Sets the shell tab width to 3 spaces $ cat -n indentation.py     1   # indentation.py     2   def foo():     3       for i in range(10)     4           print(i)     5      print('done')     6       7   foo()

请注意上面三个示例之间的显示差异。大多数代码为每个缩进级别使用4个空格,但是第5行在所有3个示例中都使用单个选项卡。标签宽度的变化,基于标签宽度的设置:

  • 如果制表符宽度为4,那么print语句看起来就像是在for循环之外。控制台将在循环结束时打印“done”。

  • 如果制表符宽度是8,这是很多系统的标准,那么print语句看起来就像是在for循环中。控制台会在每个数字之后打印“done”。

  • 如果制表符宽度为3,那么print语句看起来就不合适。在本例中,第5行与任何缩进级别不匹配。

当你运行代码,你会得到以下错误和回溯:

$ python indentation.py  File "indentation.py", line 5    print('done')                ^ TabError: inconsistent use of tabs and spaces in indentation

请注意TabError而不是通常的SyntaxError。Python指出问题所在,并给出有用的错误消息。它清楚地告诉您,在同一个文件中,制表符和空格用于缩进。

解决这个问题的方法是让同一Python代码文件中的所有行都使用制表符或空格,而不是同时使用制表符和空格。对于上面的代码块,修复方法是删除选项卡并用4个空格替换它,这将在For循环完成后打印“done”。

06
定义和调用函数

在定义或调用函数时,可能会遇到Python中无效的语法。例如,如果在函数定义的末尾使用分号而不是冒号,就会看到SyntaxError:

>>>

>>> def fun();  File "<stdin>", line 1    def fun();             ^ SyntaxError: invalid syntax

这里的回溯非常有用,插入符号直接指向问题字符。您可以通过将分号替换为冒号来清除Python中的这种无效语法。

此外,函数定义和函数调用中的关键字参数的顺序必须正确。关键字参数总是跟在位置参数之后。如果不使用此顺序,将导致SyntaxError:

>>>

>>> def fun(a, b): ...     print(a, b) ... >>> fun(a=1, 2)  File "<stdin>", line 1 SyntaxError: positional argument follows keyword argument

这里,同样,错误消息非常有助于准确地告诉您这行代码的错误之处。


本文地址:百科问答频道 https://www.neebe.cn/wenda/903360_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • syntaxerror语法错误常见问题及解决办法

    syntaxerror语法错误常见问题及解决办法

    syntaxerror语法错误常见问题及解决办法Python以其简单的语法而闻名。然而,当您第一次学习Python时,或者当您具有另一种编程语言的坚实背景时,您可能会遇到一些Python不允许的事情。如果您在尝试运行Python代码时收到过...

  • 周排行
  • 月排行
  • 年排行

精彩推荐