学生避坑Python容易犯的错

如题所述

第1个回答  2023-06-14

Python初学者易犯的6个错误新手避坑

Python中6个经典的新手错误

SyntaxError的来源

当您运行Python代码时, 解释器将首先解析它以将其转换为

Python字节码, 然后执行。解释器将在程序执行的第一阶段

(也称为解析阶段) 中发现Python中的任何无效语法。如果

解释器无法成功解析您的Python代码, 则意味着您在代码中

的某处使用了无效语法。解释器将尝试向您显示该错误发生的

位置。

当您第一次学习Python时, 遇到SyntaxError可能会令人沮

!丧。Python将尝试帮助您确定代码中无效语法的位置, 但它

提供的回溯可能有点令人困惑。有时,它指向的代码非常好。

注意:如果您的代码在语法上是正确的,那么您可能会引发其

他不是SyntaxError的异常。

1.滥用赋值运算符(=)15

在Python中有几种情况, 您无法对对象进行赋值。一些示例

分配给文字和函数调用。在下面的代码块中,您可以看到一些

尝试执行此操作的示例, 以及由此产生的SyntaxError回溯:

Python中6个经典的新手错误

>>>len('hello*) = 5

File"estd in>", line 1

SyntaxError:can'tassigntofunctioncall

>>>*foo°m 1

File“estd in>", line 1

SyntaxError:can'tassigntoliteral

) >1m'foo’

File"estd in>", line 1

SyntaxError:can'tassigntoliteral

第一个示例尝试将值5分配给len() 调用。SyntaxError消息

在这种情况下非常有用。它告诉你不能给函数调用赋值。

第二个和第三个示例尝试为文字分配一个字符串和一个整数。

相同的规则适用于其他文字值。回溯消息再次表明当您尝试为

文字赋值时出现问题。

您的意图很可能不是为文字或函数调用分配值。例如,如果您

不小心遗漏了额外的等号(=),就会发生这种情况,这会将赋

值转换为比较。如下所示,比较是有效的:

>>>len('hello') == 5

True

2.拼写错误、遗漏或误用Python关键字

Python中6个经典的新手错误

Python关键字是一组受保护的词, 在Python中具有特殊含

义。这些词不能用作代码中的标识符、变量或函数名称。它们

是语言的一部分, 只能在Python允许的上下文中使用。

|错误使用关键字的常见方式有以下三种:

①关键字拼写错误;

②缺少关键字;

③滥用关键字;

如果您在Python代码中拼错了关键字, 则会收到

SyntaxError。例如, 如果关键字for拼写错误, 会发生以下

情况:

>>>fro i in range(18) :

File“<stdin>", line 1

fro i in range(10) :

SyntaxError:invalid syntax

该消息显示SyntaxError:invalid syntax, 但这不是很有帮助

。回溯指向Python可以检测到错误的第一个位置。要修复此

类错误, 请确保所有Python关键字拼写正确。

关键字的另一个常见问题是当您完全忘记写时:

Python中6个经典的新手错误

>>>for i range(18) :

File“<stdin>", line 1

for i range(18) :

SyntaxError:invalid syntax

再一次,异常消息并没有那么有用,但回溯确实会尝试为您指

明正确的方向。如果从插入符号中移回, 则可以看到for循环

语法中缺少in关键字。

您还可以滥用受保护的Python关键字。请记住, 关键字只允

许在特定情况下使用。如果您错误地使用它们,那么您的

Python代码中将包含无效的语法。一个常见的例子是在循环

外使用continue或break。这很容易在开发过程中发生, 当

您正在实现事物并碰巧将逻辑移到循环之外时:

>names m['pam', 'jin', *michael']

if'jim'in nanes:

print(*jim found')

break

File“estd in>", line 3

SyntaxError:'break'outside loop

s>if'jim'in nanes:

print(*jin found')

continue

File“estd in", line 3

SyntaxError:'continue'not properly in loop

Python中6个经典的新手错误

在这里, Python可以很好地告诉您究竟出了什么问题。消息

“'break'外循环”和“continue'未正确循环”可帮助您确

定要做什么。如果这段代码在一个文件中, 那么Python也会

有指向误用关键字的插入符号。

另一个示例是, 如果您尝试将Python关键字分配给变量或使

用关键字来定义函数:

>>>pass=True

File“estd in>", line 1

pass=True

SyntaxError:invalid syntax

>>>def pass() :

File"estd in>", line 1

def pass() :

SyntaxError:invalid syntax

3.Python中6个经典的新手错误

通常, Python代码中无效语法的原因是缺少或不匹配的右括

号、方括号或引号。这些在很长的嵌套括号行或更长的多行块

中很难发现。借助Python的回溯, 您可以发现不匹配或丢失

的引号:

>message-*don't

File“<stdin>", line 1

message='don't'

SyntaxError:invalid syntax

Python中6个经典的新手错误

在这里,回溯指向无效代码,其中在结束单引号之后有一个t'

。要解决此问题,您可以进行以下两项更改之一

①用反斜杠转义单引号('don't') ;

②用双引号将整个字符串括起来("don't") ;

另一个常见的错误是忘记关闭字符串。对于双引号和单引号字

符串,情况和回溯是相同的:

>>>message="This is an unclosed string

File“<stdin>", line 1

message-“This is an unclosed string

SyntaxError:EOL while scanning string literal

4.错误的字典语法

您之前看到,如果您将逗号放在字典元素之外,您可能会得到

SyntaxError。Python字典的另一种无效语法形式是使用等号

(=)来分隔键和值,而不是使用冒号:

>>>ages·{'pam'-24}

File“<stdin>", line 1

ages-{'pam'-24}

SyntaxError:invalid syntax

同样,此错误消息不是很有帮助。然而,重复的行和插入符号

非常有帮助!他们直指问题人物。

Python中6个经典的新手错误

>>>ages=dict(pam=24)

>>>ages

{'pam':24}

如果您将Python语法与其他编程语言的语法混淆, 则此类问

题很常见。如果您将定义字典的行为与dict() 调用混淆, 您也

会看到这一点。要解决此问题,您可以用冒号替换等号。您还

可以切换到使用dict) :

5.使用错误的缩

其他编程语言使用花括号表示代码块, 而Python使用空格。

这意味着Python期望代码中的空白行为可预测。如果代码块

中的一行包含错误的空格数, 它将引发Indentation Error:

这可能很难看到, 但第5行仅缩进了2个空格。应该和for循

f foo() :

for i in range(10) :

print(i)

print('done')

foo()

环语句一致, 多4个空格。值得庆幸的是, Python可以很容易

地发现这一点,并会很快告诉您问题所在。

不过, 这里也有一些歧义。print('done') 行是在for循环之后

还是在for循环块内?当你运行上面的代码时, 你会看到以下

错误:

Python中6个经典的新手错误

File“indentation.py", line 5

print('done*)

Indentation Error:un indent does not match any outer indentation level

尽管回溯看起来很像SyntaxError回溯, 但它实际上是一个

进级别与任何其他缩进级别都不匹配。换句话说,

Indentation Error。错误信息也很有帮助。它告诉您该行的缩

print('done') 被缩进了2个空格, 但是Python找不到任何其

他符合这种缩进级别的代码行。您可以通过确保代码与预期的

缩进级别对齐来快速解决此问题。

6.定义和调用函数

SyntaxError:

>>>def fun O;

File“estd in>", line 1

def fun() ;

SyntaxError:invalid syntax

这里的回溯非常有用,插入符号直接指向问题字符。您可以通

过将分号替换为冒号来清除Python中的这种无效语法。

此外,函数定义和函数调用中的关键字参数都需要按正确的顺

在定义或调用函数时, 您可能会在Python中遇到无效语法。

例如,如果在函数定义的末尾使用分号而不是冒号,则会看到

Python中6个经典的新手错误

序排列。关键字参数总是在位置参数之后。不使用此顺序将导

致SyntaxError:

>>>def fun(a, b) :

print(a, b)

mmm

>>>fun(a-1, 2)

File“<stdin>", line 1

SyntaxError:positional argument follows keyword argument




相似回答