新手常见的5个Python错误

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

推荐阅读

 1. 深度学习——入门PyTorch(一)

 2. 深度学习——入门PyTorch(二)

 3. PyTorch入门——autograd(一)

 4. PyTorch入门——autograd(二)

 5. PyTorch入门——autograd(三)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值