• 欢迎访问情深深几许的博客网站,这里有免费网络资源信息,WordPress教程,Python、MySQL教程
  • 推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入金克斯的弹药库
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本网站吧

新手向:Python常见错误及解决方法

Python zk 3年前 (2018-04-27) 18次浏览 0个评论
文章目录[隐藏]

写在前面:此文为应一好友的邀请所作,面向对象为初学Python者,加之笔者已多年未深入Python且技术有限,其中语言可能不够严谨,甚至会有错误,还望各位读者见谅,并联系我更改以免误导新手。非常感谢您的理解。本人联系方式:admin@likehide.com

目前还在持续更新中,欢迎随时回来看看。

一、 错误查看方式

1.  使用IDE查看

IDE:集成开发环境(IDE,Integrated Development

Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。   –引用自百度百科

通俗的来说就是程序开发一条龙服务,拿办酒席举例,如果不使用家政一条龙服务(IDE)。

你就需要单独请采购,负责采购所需要的食材给厨师(编辑器,用于编辑代码,相当于记事本的功能,但相对普通记事本多了代码高亮和代码补全等功能)、

厨师,负责将食材加工成人能吃的东西(编译器,用于将代码翻译成计算机可以识别的东西,虽然 python 是解释性语言使用的是解释器…)、

这个真不知道用啥举例(调试器,用于调试程序,简单说就是找出代码中的错误)、

管事,负责协调沟通客人和工作人员(图形用户界面,UI,就是你能看到的软件界面)

所以使用 IDE 的话能大大提高新手的编程效率。

对于错误的查看方式,使用 IDE 也是相当方便的,对于一些明显的语法或者拼写错误,IDE 会直接在编辑界面给出错误提示,而无需运行查看错误信息。

这里以现在常用的 IDE PyCharm 举例。

新手向:Python常见错误及解决方法

可以看到,在if 语句后面多了一条红色的波浪线,这就是在提示你此处有错误。

此时我们只需要将鼠标移至红色波浪线处就能看到错误提示:

新手向:Python常见错误及解决方法

可以看到此时提示的是 “colon expected” 按照英文直译就是缺少冒号 的意思,也就是说,我们这里缺少了一个冒号。

新手向:Python常见错误及解决方法

我们把冒号加上就会发现红色波浪线已经消失。

2.  在解释器(即上文编译器)中查看

无论是否使用IDE进行程序的编写,最终的代码都是需要由解释器进行解释并输出的,所以使用解释查看错误不仅可以在终端中查看,在IDE 中也是可以查看的。

下面我们先在IDE中进行举例:

首先故意写一个错误,然后点击运行,

新手向:Python常见错误及解决方法

可以看到,在弹出的输出窗口中出现了红色的错误提示,下面我们逐句解释怎么看这个错误信息。

首先是 File “F:/python/test_el/main.py”, line 5 该句指出了出现错误的文件以及错误的位置,在这里所指即为F盘下的 python/test_el  文件夹下的 main.py 文件的第5行有错误。(对于一般的IDE或者编辑器都会在编辑界面的左侧显示文件中的行数,如果没有显示,大多数编辑器都支持使用快捷键 Ctrl+G 跳转到指定行)

下一句

   if name == “el”

                  ^

指出了第5行的哪个位置出现了错误,在这里指向的是“el” 之后。需要注意的是,该指向仅供参考,有些时候引起错误的并不是所指向的位置而是前面或后面的位置,所以排查错误时不能只看指向的位置,还需要联系上下文进行检查。

最后一句 SyntaxError: invalid syntax 指出了错误的类型和错误的具体解释,在此处即为语法错误中的无效语法。

可以看到,解释器给出的错误信息不够人性化,同时也不如 IDE 给的提示易于理解。但是解释器能够检测出的错误相对于IDE是多得多,基本上除了逻辑错误,其他的所有错误解释器都能够检测出并且给出提示。而某些错误,如 数组越界(IndexError: list index out of range) ,IDE是无法检测出来的。

新手向:Python常见错误及解决方法

由图可以看到,IDE的编辑器并没有提示错误的红色波浪线,但是运行时解释器却能够给出数组越界的提示。

然后是直接在终端中编写程序

因为其查看方式和IDE一致,且现在直接使用终端编写程序的新手少之又少,所以这里不再细说,仅举一列:

新手向:Python常见错误及解决方法

二、 常见错误

SyntaxError

(1)SyntaxError:invalid syntax

在上文中我们已经接触过一个导致 SyntaxError :invalid syntax 的原因,那就是在 if 语句后缺少冒号。

下面我们再举几个可能会导致 无效语法 错误的例子。

1.    if , elif , else, for , while , class ,def 等语句末尾没有添加冒号。

解决方法:在相应的位置添加冒号:

如:

新手向:Python常见错误及解决方法

更改为

新手向:Python常见错误及解决方法

2.    尝试以Python 的关键字作为变量名、函数名、方法名、类名等

如:

新手向:Python常见错误及解决方法

解决方法:更改变量名、函数名、方法名、类名为其他名字

如:

新手向:Python常见错误及解决方法

附Python中的关键字(给变量取名的时候千万不能取成下面的这些名字哦):

and, or,not, is, as, assert, break, pass, continue, class, def, del, if, elif, else,except, False, True, finally, for, from, global, import, in, lambda, None,nonlocal, raise, return, try, while, with, yield

3.    语句不完整,缺少左括号等(为什么是左括号呢?因为右括号报的是另外一个错误…)

如:

新手向:Python常见错误及解决方法

解决方法:补全缺少的部分,如:

新手向:Python常见错误及解决方法

4.    关键字拼写错误

如:

新手向:Python常见错误及解决方法

解决方法:

请检查你的关键字是否拼写错误,并更正,如:

新手向:Python常见错误及解决方法

5.    缩写错误

在使用 += 、-= 等缩写时不能在中间添加空格,否则会报错:

新手向:Python常见错误及解决方法

解决方法:去除多余的空格

(2)SyntaxError: Missingparentheses in call to ‘print’

首先看两张图:

新手向:Python常见错误及解决方法

新手向:Python常见错误及解决方法

可以看到,相同的代码,第一张图没有报错,但是第二张图却报错了。

不知道大家有没有注意到,在截图的第一行,有这么一行文字:

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:16:31) [MSC v.1600 64 bit (AMD64)]on win32

这表示的是 Python 的解释器的版本,仔细观察上图,不难发现,两张图的解释器版本并不一样。

还记得前文提到的 Python 的关键字吗?

没错,在 Python 2.x 版本中 print 是作为关键字出现的,而在Python 3.x 版本中,print是作为函数出现。

以上内容不理解没关系,只要记得在 python 2.x 中使用形如 print “hello”

在 python 3.x 中使用形如 print(“hello”)

如果你还是不知道什么意思或者说怎么用请一律使用形如 print(“help”)

并且出现 SyntaxError: Missing parentheses in call to ‘print’ 错误时将print的括号加上即可。

(PS:本来这个错误不应该特别强调不然反而会让初学者懵逼,但是考虑到现在Python 2.x 代码仍然很多,为了避免初学者使用3.x 的解释器去运行2.x的代码导致出错,我还是单独把这个错误提出来讲一下)

(3)SyntaxError:EOL while scanning string literal

当字符串忘记打引号时会出现该错误。如:

新手向:Python常见错误及解决方法

解决方法:补全引号,如:

新手向:Python常见错误及解决方法

(4)SyntaxError: unexpected EOFwhile parsing

该错误意为 语法错误:意外的文件末尾,出现情况如下:

新手向:Python常见错误及解决方法

可以看到是因为最后一行代码缺少了一个右括号造成的。

解决方法:补全括号即可。

那么,问题来了,如果缺少括号的代码不是在文件末尾会报什么错误?我们来看看:

新手向:Python常见错误及解决方法

从图中,可以很明显的看到,错误的并不是错误提示给出第5行,而是它的上一行:第4行,所以上文才说错误提示给出的错误位置不一定就是正确的位置,像现在这种情况,因为第一个 print 没有右括号,所以解释器在翻译时会认为第一个 print 函数并没有结束,下一个print 函数也是属于第一个 print 的,但是很明显这样做是不符合语法的,所以报了 无效的语法 错误。

解决方法:补全第一个 print 函数的右括号。

NameError

(1) NameError:name ‘xx’ is not defined

出现该问题的原因是 xx 未定义(xx可能是变量名也可能是函数名等),如:

新手向:Python常见错误及解决方法

解决方法,检查1.是否是变量名或函数名拼写错误。2.是否是没有定义该变量、函数名。3.是否是忘记导入相应模块。如:

新手向:Python常见错误及解决方法

又如:

新手向:Python常见错误及解决方法

解决:

新手向:Python常见错误及解决方法

IndentationError

该错误常见的错误提示有:

1.IndentationError:unexpected indent

2.IndentationError:unindentdoes not match any outer indetation level

3.IndentationError:expectedan indented Block

虽然这些错误的提示不同,但是无外乎都是缩进问题。

首先解释何为缩进,缩进即为在代码前面添加空格(或TAB),从而区分不同的代码块。

例如:

新手向:Python常见错误及解决方法

上述代码将会输出:

新手向:Python常见错误及解决方法

可以看到在上图中,if 的下一行前面多了四个空格,而 else 并没有空格,但 else 的下一行的前面却又有4个空格,这表示 print(“el”) 语句属于 if  “管辖”,而 else 并不属于,但 print(“world”) 属于 else 管辖。

不同于其他语言,python 对于缩进的要求是极为严格的,只要有缩进不对,都会报错。如:

新手向:Python常见错误及解决方法

上述代码我们想实现的是如果名字等于 el 就输出 el ,否则输出 world ,但是我们却在第一个 if 下面忘记加上空格,这样 if 就无法区分究竟哪一行代码属于它管辖,从而造成缩进错误。

解决方法:按照实际情况添加空格

还有一种情况就是前后使用空格数量不同,如:

新手向:Python常见错误及解决方法

解决方法:请始终保证你的缩进量(空格数)一致

最后,还有可能因为 TAB 与空格混用导致缩进错误,但是却不容易看出来,所以我建议使用空格作为缩进而不是 TAB

TypeError

(1)  TypeError: Can’t convert ‘xxx’ object to str implicitly

造成该错误的原因是尝试连接不同类型的变量,如:

新手向:Python常见错误及解决方法

解决方法:请确保欲连接的变量是同一类型,如不是同一类型,仍然想要连接,请尝试强制转换成同一类型,如将 int 转换成 str :

新手向:Python常见错误及解决方法

IndexError

(1) IndexError: list index out of range

数组越界,造成该错误是因为引用的数组下标已经超出了数组的实际大小,如:

新手向:Python常见错误及解决方法

可以看到数组只有3个元素,但是我们却尝试引用第四个元素。

解决方法:检查数组大小,确保没有越界。如:

新手向:Python常见错误及解决方法

上述程序输出:

新手向:Python常见错误及解决方法

PS:该错误通常出现在遍历数组时没有正确判断数组大小。

UnicodeEncodeError

编码错误,一般在使用中文时或者打开编码不同的文件时会出现该问题,该问题需要具体情况具体分析,我自己目前对于该问题都还是一脸懵逼,所以就不举例了。

一般来说,解决方法有:

1.    在最顶部添加代码 #coding=utf8 (或其他合适的编码)

2.   在出现错误的字符后添加 encode(“utf8”)  或 decode(“utf8”)   (或其他适合的编码)

三、 遇到没见过的错误怎么办?

请善用搜索,请将错误提示(如:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1…)复制至搜索引擎(如 百度)中,你将会得到解决方法。

原文始发于:新手向:Python常见错误及解决方法


情深几许 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:新手向:Python常见错误及解决方法
喜欢 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址