Python作为比较便于编写的编程语言之一,已经愈发受编程者们的欢迎。其集成开发环境(IDE)也有很多可供选择,例如Pycharm,Visual Studio,Jupyter笔记本等。无论选择哪种IDE,都可能会遇到一些错误。这些错误和问题的发生主要是由于判断失误,对特定主题缺乏深入的知识,或者仅仅可能是不小心导致的。
本篇文章总结了一些初学者常犯的5种错误,这些错误虽然特别简单,但是对于初学者来说可能会浪费比较多的时间在上面。而且由于每个人的编程习惯不同,错误状态百出,有时候也不是能从网上直接搜索到错误原因。我们还将讨论打印的错误类型,并了解原因以及如何避免出现特殊错误。
1. 缩进Indentation
缩进是指代码行或代码块开头的空格数。常用在if-else、with语句或者函数之后。通常用空格键或四个空格键缩进一次,或按一次Tab键。其在python中格外重要,可以替代其他编程语言(如C,C ++或Java)中的花括号“ {}”之类的东西。
常见的缩进错误有:
当忘记在函数或代码块的起始行中缩进时,会触发下列错误:
IndentationError: expected an indented block
当代码块或程序中应有缩进但未缩进时,会出现此错误。比如当在所需的代码块中提供两个空格,并且该特定行的描述不适合整个代码时,会触发下列错误:
IndentationError: unindent does not match any outer indentation level
代码的其中一行没有和其他缩进对齐,会触发下列错误:
IndentationError:unexpected indent
很多初学者开始学习Python时,往往会根据网站或者视频上的代码,如果盲目复制粘贴,也会发生这些错误。解决此问题的主要方法是,确保您在间距上保持一致,并通过查看每个发生的错误的描述来解决每个问题。
Trick: 尽量少使用空格,统一使用Tab键。
2. 文件名和模块名冲突
如果我们编写了一个开发脚本,保存时对其进行命名的名称和脚本中import的模块名称一致,就会触发此错误。此错误会触发ImportError,因为命名的.py文件将替换实际的现有库模块。因此,当尝试在运行模块时调用该函数时,它根本不起作用。在下面的示例中,我们将文件另存为gtts.py:
from gtts import gTTS
import os
text = “Hello, Python”
s = gTTS(test)
s.save(“my_music.mp3”)
os.system(“my_music.mp3”)
ImportError:cannot import name 'gTTS' from 'gtts'
该错误其实很容易解决:只要我们避免将该脚本的名称命名为gtts.py即可。如果我们非常想使用该名称(比如感觉这个名称更能直观的看出来脚本的作用),不妨将其命名为my_gtts.py或者gtts1.py等等。
3. 用错括号
在Python中主要有三种类型的括号,每种都有特定的用途。方括号“ []”用于列表和索引,花括号“ {}”用于字典或集合,括号“()”用于元组。初学者常常会混淆使用正确的括号,从而导致可能发生的一些错误。
声明列表的其中一种方法是a = [];另一种方法是a = list()。但是如果不小心搞混了上面两种的使用,例如使用a = list[],就会出现如下语法错误。
SyntaxError:invalid syntax
在处理列表或元组的索引时,我们总是使用方括号“ []”。使用类似于x = [1, 2, 3]的列表或类似于x =(1, 2, 3)的元组时,以x(1)的形式写入索引将导致以下错误。
TypeError:'list' object is not callable
或者
TypeError:'tuple' object is not callable
Trick: 确保始终使用方括号“ []”来获取特定索引的值。例如:可以使用x [1],将返回值2。
4. 对Numpy格式的数据获取形状时使用括号
这种错误和上一个错误非常相似,在机器学习的使用过程中,我们常使用numpy这个模块。这是一个非常简单的模块,矩阵的概念我们从大学到现在也学习了太多次。但是需要注意的是:numpy中的shape是属性而不是函数,调用后将返回一个由numpy数组的形状组成的元组。示例错误如下:
import numpy as np
a = np.zeros((5, 6))
a.shape()
这将触发以下错误:
TypeError:'tuple' object is not callable
Trick: 仅使用不带括号的a.shape。
5.局部变量和全局变量
局部变量是在特定代码块或代码语句中定义的变量。该局部变量只能在该特定代码块内访问,而不能在其他地方访问。形式参数标识符也充当局部变量,这些也是在函数中定义为虚拟变量的变量。
全局变量是在主程序中定义的变量,而不是在函数或特定代码中定义的变量。在整个程序中都可以访问此变量。
如果我们在主程序中使用局部变量时就会触发类似下面的名称错误:
NameError:name 'face_name' is not defined
Trick: 尽量少使用全局变量,坚持使用代码块中的局部变量,如果想在整个程序中使用该变量,请先使用全局变量对其进行定义。
结论
本文介绍了很多开始使用Python和机器学习时犯的5个最常见的错误。其实有时候我今天也会不小心烦这些错误,有时候甚至觉得自己真的很“蠢”。对于初学者来说,希望我们都可以熟悉这些错误发生的原因,以及如何避免这些问题。不要被这些简单的错误打击信心从而产生挫败感~你们只是还没有熟悉Python语言~
· END ·
RECOMMEND
推荐阅读