大家好,今天我们简单介绍下在学习Python时常见的一些错误和异常。

记得刚接触Python的时候,一条简单的语句在执行的时候却总能遇到报错。然后各种艰难的复查发现可能是循环语句缺少冒号啊、用了中文的标点符号啊、引号/括号等少了一个或者无法匹配啊、函数方法或变量名拼写错误啊等等。

在Python编程中有两种可区分的报错:语法错误和异常。

语法错误又称解析错误,是我们在刚接触学习Python 时最容易遇到的错误,区区别于异常而言,语法错误非程序执行时的逻辑错误;

即使语句或表达式在语法上是正确的,但在尝试执行时,它仍可能会引发错误,而这个在执行时检测到的逻辑错误被称为异常。

1.语法错误

语句本身的语法存在问题,常见的有循环语句后面少了冒号、用了中文的标点符号、字符串赋值时引号少一个等等,属于非逻辑错误。

In [1]: for i in range(10)

...: print(i)

File "", line 1

for i in range(10)

^

SyntaxError: invalid syntax

在这个例子中,for循环遗漏了一个冒号。解析器会输出出现语法错误的那一行,并显示一个“箭头”,指向这行里面检测到的第一个错误。错误是由箭头指示的位置 上面 的 token 引起的(或者至少是在这里被检测出的):在示例中,在 print() 这个函数中检测到了错误,因为在它前面少了个冒号 (':') 。文件名和行号也会被输出,以便输入来自脚本文件时你能知道去哪检查。

In [2]: for i in range(10):

...: print(i)

File "", line 1

for i in range(10):

^

SyntaxError: invalid character in identifier

在这个例子中,for循环后面我们错误使用了中文字符冒号(:),在错误类型后面的提示invalid character in identifier也说的很明确,就是标识符中用了无效的字符。

In [3]: s = 'a

File "", line 1

s = 'a

^

SyntaxError: EOL while scanning string literal

在这个例子中,赋值字符串少了一个引号。在错误类型后面其实有提示EOL while scanning string literal,直译就是字符串扫描的时候EOL了吧。

2.异常

异常是在程序执行过程中发生的逻辑错误,大多数异常并不会被程序处理,大多数异常并不会被程序处理,此时会显示如下所示的错误信息:

In [4]: 1/0

Traceback (most recent call last):

File "", line 1, in

1/0

ZeroDivisionError: division by zero

In [5]: 1+2*var

Traceback (most recent call last):

File "", line 1, in

1+2*var

NameError: name 'var' is not defined

In [6]: 1+'2'

Traceback (most recent call last):

File "", line 1, in

1+'2'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

错误信息的最后一行告诉我们程序遇到了什么类型的错误。异常有不同的类型,而其类型名称将会作为错误信息的一部分中打印出来:上述示例中的异常类型依次是:ZeroDivisionError, NameError 和 TypeError。作为异常类型打印的字符串是发生的内置异常的名称,这一行的剩下的部分根据异常类型及其原因提供详细信息。

错误消息的开头部分以堆栈回溯的形式显示发生异常的上下文:通常它会包含列出源代码行的堆栈回溯;但是,它将不会显示从标准输入读取的行。

拿1/0为例,我们知道0是无法作为除数的,这里就存在逻辑错误。在错误信息中,我们发现这是一个ZeroDivisionError异常类型,其发生异常的是代码第1行1/0位置,具体解释是division by zero(除数为0)。

2.1.常见的异常

NameError:当某个局部或全局变量在使用前未被定义时

In [7]: 1+2*var

Traceback (most recent call last):

File "", line 1, in

1+2*var

NameError: name 'var' is not defined

变量var在参与运算之前没有被定义,因此出现该异常提示。我们只需要在此代码前对var进行定义,方可正常执行后续代码。另外,我们在初学的时候,容易出现对变量名拼写错误,导致自以为已经定义但是依旧出现这个报错的情况:比如定义var=2,实际使用的时候是1+war的情况。

TypeError:当一个操作或函数被应用于类型不适当的对象时

In [6]: 1+'2'

Traceback (most recent call last):

File "", line 1, in

1+'2'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

对于运算符+的操作,不支持int和str,这个时候检查出现的变量类型即可完成自查。

IndentationError:当出现缩进不当时

In [7]: for i in range(10):

...: print(i)

File "", line 2

print(i)

^

IndentationError: expected an indented block

在for循环后面的语句,应为缩进模块,但是这里并没有进行合理缩进,故而出现报错。

AttributeError:当试图使用一个对象没有的属性或方法时

In [8]: dic = {'key1':'var1',

...: 'key2':'var2'}

In [9]: dic.append('a')

Traceback (most recent call last):

File "", line 1, in

dic.append('a')

AttributeError: 'dict' object has no attribute 'append'

比如我们定义一个字典dic,但是对它使用了列表的方法append,这个时候就会出现报错提示dict没有方法append。出现类型错误的时候,查看对象是否有想使用方法,或者查看一下你的方法拼写是否正确。

IndexError:当序列下标索引超出范围时

In [10]: lis = [1,2,3,4,5]

In [11]: lis[6]

Traceback (most recent call last):

File "", line 1, in

lis[6]

IndexError: list index out of range

对于列表lis一共5个元素,若我们试图访问第7个元素也就是lis[6]时会出现 列表超出了范围的提示。通常我们在编写循环,访问序列元素的时候容易出现此类越界问题。

KeyError:当试图访问字典中不存在的键时

In [12]: dic = {'key1':'var1',

...: 'key2':'var2'}

In [13]: dic['key1']

Out[13]: 'var1'

In [14]: dic['key']

Traceback (most recent call last):

File "", line 1, in

dic['key']

KeyError: 'key'

在字典dic中,我们并没有key这个键,若我们试图访问不存在的键就会提示 KeyError: 'key',此时我们复查key是否存在即可。

ModuleNotFoundError:ImportError 的子类,当一个模块无法被定位时将由 import 引发

In [15]: import docxtpl

Traceback (most recent call last):

File "", line 1, in

import docxtpl

ModuleNotFoundError: No module named 'docxtpl'

我们引入模块不存在的时候,会出现此报错,这个时候可以检查模块的名称拼写是否正确或者进行模块的安装(pip install docxtpl)。

ImportError:当我们试图引入不存在的库时,并且当 from ... import 中的 "from list" 存在无法找到的名称时

In [16]: from os import x

Traceback (most recent call last):

File "", line 1, in

from os import x

ImportError: cannot import name 'x' from 'os' (C:\Users\Gdc\anaconda3\lib\os.py)

比如随便写的这个从os中import x,实际上不存在。

ValueError:当操作或函数接收到具有正确类型但值不适合的参数

In [17]: num = int(input('请输入一个整数:'))

请输入一个整数:a

Traceback (most recent call last):

File "", line 1, in

num = int(input('请输入一个整数:'))

ValueError: invalid literal for int() with base 10: 'a'

比如当我们使用int对输入对象进行转化为整数时,输入的对象是字符串时,这是一个不合适的参数。

KeyboardInterrupt:当用户按下中断键 (通常为 Control-C 或 Delete) 时

In [18]: num = int(input('请输入一个整数:'))

请输入一个整数:Traceback (most recent call last):

File "", line 1, in

num = int(input('请输入一个整数:'))

File "C:\Users\Gdc\anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 860, in raw_input

return self._input_request(str(prompt),

File "C:\Users\Gdc\anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 904, in _input_request

raise KeyboardInterrupt("Interrupted by user") from None

KeyboardInterrupt: Interrupted by user

当程序执行过程中,我们使用 Control+C 或 Delete时,就会出现中断程序的提示,我常常在程序执行过程中想复制部分打印信息的时候错使用 Control+C想着复制却使得程序中断的情况。

3.遇到错误和异常时怎么办?

其实,大部分的报错信息都有很明显的指引,已经具体到某行具体什么类型的错误以及对错误比较清晰的解释。

遇到报错不要慌,对于新手来说,常见的就是先检查基础语法对不对、标识符是不是用了中文,变量名的拼写是不是错了,变量名是不是没定义就调用了,缩进是不是没整对,函数方法是不是用错了,想引入的库是不是没有安装等等。

再就是复制报错信息,然后丢到搜索引擎里查!!基本上绝大多数报错都有人遇到过且在网上能找到相关的解决方案!!

4.标准异常查询

python 语法错误 和异常_Python基础知识:新手学Python时常见的语法错误和异常相关推荐

  1. 零基础可以学python吗-Python编程语言好学吗?零基础转行能学Python吗?

    Python编程语言好学吗?零基础转行能学Python吗?人工智能时代的来临催生了很多新兴行业,Python是最具代表性也是比较热门的技术之一.有人看好Python入门简单.功能强大的特性,选择转行从 ...

  2. python零基础能学吗-Python编程语言好学吗?零基础转行能学Python吗?

    Python编程语言好学吗?零基础转行能学Python吗?人工智能时代的来临催生了很多新兴行业,Python是最具代表性也是比较热门的技术之一.有人看好Python入门简单.功能强大的特性,选择转行从 ...

  3. Python编程语言好学吗? 零基础转行能学Python吗?

    Python编程语言好学吗?零基础转行能学Python吗?人工智能时代的来临催生了很多新兴行业,Python是最具代表性也是比较热门的技术之一.有人看好Python入门简单.功能强大的特性,选择转行从 ...

  4. python文件不存在异常_Python基础知识:文件和异常

    1.相对路径:如果文件和程序在同一文件夹内,可不用路径:如果文件在程序所在文件夹下一级文件夹中,只需添加下一级文件夹名称即可: 在Linux和OS系统中:文件路径中使用斜杠(/) 在Windows系统 ...

  5. 下列哪个不是python元组的定义方式_Python基础知识笔试

    Python基础知识笔试 单选题(2.5分*20题) 1. 下列哪个表达式在Python中是非法的? B A. x = y = z = 1 B. x = (y = z + 1) C. x, y = y ...

  6. python猴子吃桃子的问题_Python基础知识初入门

    想成为数据分析.机器学习.人工智能等领域的稀缺人才,就必须学会使用其相对应的编程语言,Python作为其主要的编程语言之一,在人工智能.大数据等领域有很大的需求和应用.以下是编程语言Python的基础 ...

  7. python软件安装及设置_Python 基础知识及安装配置

    前言 1.Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2.Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他 ...

  8. python中prompt的意思_Python 基础知识入门

    一.学习python数据分析前的准备工作:下载Anaconda anaconda是一个包管理器和环境管理器,其内置的jupyter notebook 功能非常强大,可以在jupyter noteboo ...

  9. python语言三大基本控制结构_Python基础知识之4——三大控制结构

    原博文 2018-12-02 21:38 − 控制结构就是控制程序执行顺序的结构. Python 有三大控制结构,分别是顺序结构.分支结构(选择结构)以及循环结构.任何一个项目或者算法都可以使用这三种 ...

最新文章

  1. FPGA之道(41)HDL的三种描述方式
  2. DNS服务搭建和正反区域解析
  3. C#字节数组与值类型变量的互相转换,以及注意事项
  4. QML基础类型之int
  5. nginx整合php+lua+oracle环境搭建
  6. Appium移动自动化配置-ios安卓
  7. 分享一个免费短信猫OCX源码
  8. Android开发用到的几种常用设计模式浅谈(一):组合模式
  9. 进程间通讯(一)--邮件槽
  10. 【Redis】Redis 基础知识 常用命令 命令积累
  11. web前端新人第一课:html基础知识,你能学会吗?
  12. golang导入包的理解
  13. 大数据分析,利用向外扩展技术深入挖掘商业价值
  14. 利用Python,通过关键字获取漏洞平台最新漏洞信息
  15. 打开word出现自动化automation错误、Microsoft visual basic 运行时错误
  16. R 图表中的字体调整
  17. Androd高清平板应用推荐之挖财2.0
  18. 小米Civi正式发布:售价2599元起,聚焦年轻女性用户
  19. 【随手记】phpmyadmin配置后大白脸
  20. OSChina 娱乐弹弹弹——自古英雄多好色,人不风流枉少年

热门文章

  1. Unity(如何把方形图片整成圆形)
  2. 逻辑备份和物理备份表级恢复
  3. Word标准简单格式
  4. 《Windows 8 权威指南》——第1章 Windows 8已经到来的盛宴 1.1 Windows商店
  5. Deep Freeze冰点还原精灵破解|对Persi0.sys文件的思考
  6. linux将txt文件转化为raw,如何利用qemu-img工具将其它格式的镜像文件转换成VHD或RAW格式...
  7. 单相变压器的平衡方程式
  8. 小闫陪你入门 Java (三)
  9. IDEA中如何实现git的cherry-pick可视化操作?
  10. 深度学习100问之深入理解Regularization(正则化)