一、常见异常及场景举例

 1.AssertionError

  断言失败,断言是调试中常用(表示自己并不常用┑( ̄Д  ̄)┍)手段

  举例:

  

def foo(s):
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n
foo(0)

  上面代码就会输出AssertionError: n is zero!

  方案:

  一般是自己写的,检查设置断言(assert)的地方

 2.AttributeError

  访问了对象没有的属性

  举例:

  

str_a = ''
str_a.decode()

  上面代码会输出:AttributeError: 'str' object has no attribute 'decode'

  方案:

  检查报错相应行,和对应的对象。一般报错会有提示对象的类型。

 3.IOError

  输入输出异常,常见于文件操作

  举例:

  

file = 'hello_world.txt'
f = open(file, 'r')
f.read()
f.close()

  上面代码会输出:

  python2:IOError: [Errno 2] No such file or directory

  python3:FileNotFoundError: [Errno 2] No such file or directory

  方案:

  检查文件、文件路径、文件操作权限

 4.IndexError

  索引异常,一般是索引超出范围

  举例:

  

list1 = [1, 2, 3]
print(list1[3])

  上面代码输出IndexError: list index out of range

  方案:

  检查对应位置的对应类型的对象的值。比如是否获取到的列表为空?调试或者打印看看。

    或者获取到的值和自己预想的不一样?是不是格式整齐的许多列表中出了一个叛徒?

5.ImportError

  模块或者包引入错误

  整个错误很常见,不举例了

  方案:

  检查是否包没有安装?python不同版本的同一功能的模块是否叫法不一样?

  模块名的大小写有没有问题?模块路径对不对?

 6.IndentationError

  代码没有正确对齐

  举例:

  

list1 = [1, 2, 3]
print(list1)

  方案:

  检查缩进。冒号下一行是不是没缩进?同一代码块缩进格数不一样?是不是用了tab缩进,空格出问题了?

 7.NameError

  对象未声明/初始化,属性不存在

  举例:

  

print a

  方案:

  python不用额外声明变量,检查一下有没有初始化。另外,注意一下作用域。

  在类里面的时候,检查属性是不是在普通方法里面用到的,而没在__init__()中初始化。

 8.SyntaxError

  python语法错误

  不举例了,没意思

  方案:

  检查各种括号、冒号等标点符号,是不是用了中文标点?全角半角有没有问题?

  看下python环境,版本有没有用错,比如python3中使用print。。

9.TypeError

  类型错误

  举例:

  

num1 = ''
print(num1 + 1)

  方案:

  检查类型使用。是不是数字当字符串了?是不是参数传错了?

 10.WindowsError、OSError、SystemError

  系统调用失败、操作系统错误、解释器系统错误

  检查解释器有没有问题,操作系统权限有没有

二、处理异常语句

  Python处理异常相关语句try、except、else、finally

 1.try:
  捕捉异常,捕捉到异常后转入except处理

  感觉某块代码会有异常时,就捕捉。

2.except:

  处理异常,对捕捉到的异常进行处理,在try里面出现异常时进入该语句块

  可以跟异常类型,如 except NameError,只处理相应类型的异常,类型不对,则异常继续抛出

  python2中except NameError,e:

  python3中except NameError as e:

  不跟类型时,啥异常都处理

  可以嵌套多个,会从上到下一个一个匹配

  不想处理的时候用pass

 3.else:
  无异常时执行,在try里面没有出现异常时进入该语句块

 4.finally:
  退出try时执行,不管有没有异常退出try时都执行。

  与try配对,一个try只能有一个,一段程序中多个try可以有多个finally。

  当程序异常退出时finally也能执行,因为异常退出时,说明try没有准确捕捉异常,但是try已经试图捕捉过,退出try时仍然会执行finally,然后再把异常向上抛出。

三、异常处理顺序

  异常从内到外捕捉,一层一层向上抛出。都没抓到就报错。

  如:

  try:

    # 他没捉到我再捉

    try:

      # 我先捉

    except Exception:

      # 有问题在我这处理,不该我背的锅就甩出去

  except:

    # 我处理里面没抓到的问题,处理不了的锅同样甩出去

  else:

    # 没什么问题,就我来说句,

    # 有问题我就静静地看你们甩锅

  finally:

    # 不管怎样我来总结一下

四、手动引发异常

 1.语句 raise

  raise后面可以跟异常,也可以不跟

  raise执行之后就抛出异常,一般情况下程序终止

  使用try...except...语句捕捉raise抛出的异常,和普通异常一样处理

  

 2.手动引发异常的原因

  1)你喜欢,你就引发个异常

  2)你不让别人这么做,就引发个异常

  3)这个不合理,我引发个异常

  

  看到一句话,觉得很有道理,摘抄:

     所有的异常都是主动抛出的,只是不是你抛出的。

  比如说python的各种异常,就是python主动抛出的,把python看做一个和我们一样的人,只不过是它在制定游戏规则而已。

  主动引发异常因情况而定。很多情况会用在制定规则、测试、终止程序等等。

  

五、自定义异常

  使用一个类继承Exception即可自定义异常

  Exception是异常类的基类,BaseException是Exception的基类。

  比如说

  

class MyException(Exception):
pass try:
raise MyException('hello!')
except MyException as e:
print(type(e))
print(e)

  自定义的异常,和python定义的异常,一样用。

  

  

 

Python异常基础的更多相关文章

  1. Python——异常基础

    异常基础 在Python中,异常会依据错误自己主动地被触发.也能由代码触发和截获.异常由五个语句处理: 1.[try/except]:捕捉由Python或你引起的异常并恢复. 2.[try/final ...

  2. Python异常(基础) except

    为什么要异常处理机制:在程序调用层数较深时,向主调函数传递错误信息需要层层return 返回比较麻烦,用异常处理机制可以较简单的传送错误信息 什么是错误 错误是指由于逻辑或语法等导致一个程序已无法正常 ...

  3. Python 异常机制

    1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! try: pass # 程序正常执行时做什么操作 ...

  4. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  5. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  6. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  7. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  8. Python 从基础------进阶------算法 系列

    1.简介                                                                                               关 ...

  9. Python开发基础-Day23try异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

随机推荐

  1. 编写高质量代码改善C#程序的157个建议——建议21:选择正确的集合

    建议21:选择正确的集合 要选择正确的集合,首先要了解一些数据结构的知识.所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合. 集合的分类参考下图: 由于非泛型集合存在效率低及非类型安全 ...

  2. 对request,session,application作用域形象理解

    看到一篇比较有意思的文章,分享一下.原网址:http://blog.csdn.net/rushkid02/article/details/8063792 几乎所有的Web开发语言都支持Session功 ...

  3. APP压力稳定性测试

    转自:https://www.cnblogs.com/nuonuozhou/p/8643735.html 1.android系统自带monkey程序,模拟用户触摸屏幕,滑动track ball,按键等 ...

  4. Django工程中使用echarts怎么循环遍历显示数据

    前言: 后面要开发测试管理平台,需要用到数据可视化,所以研究了一下 先看下最后的图吧,单击最上方的按钮可以控制柱状图显隐 views.py # -*- coding: utf-8 -*- from _ ...

  5. access denied for user 'root'@'localhost'

    编辑mysql配置文件my.ini(在mysql的安装目录下,我的在D:\Program Files\MySQL\MySQL Server 5.0\my.ini),在[mysqld]这个条目下加入 s ...

  6. [日常]无线鼠标滚动缩放EXCEL表时,缩放比例过大问题

    这也是一个奇葩问题,解决方法: 把USB接收器拔掉重新插上,效果拔群

  7. Delphi XE8如何同Eclipse使用相同的Android SDK?

    我的Android SDK是单独安装的:Eclipse也是最新版的,并不是谷歌提供的集成了SDK的那个Eclipse:Delphi XE8安装后,我并没有通过XE8里面下载Android SDK到XE ...

  8. 【bzoj1009】: [HNOI2008]GT考试 字符串-kmp-矩阵乘法-DP

    [bzoj1009]: [HNOI2008]GT考试 先用kmp写个暴力 /* http://www.cnblogs.com/karl07/ */ #include <cstdlib> # ...

  9. Jmeter_使用IE代理录制脚本

    因为项目登录的密码需要RSA加密,选用了jmeter作为压测工具: 就自己本次项目,顺便学习Jmeter,做一个简单的记录,本文主要介绍使用IE代理录制脚本: 自己也尝试过使用Badboy录制,还是喜 ...

  10. java集合类学习笔记之LinkList

    1.简述 LinkList的底层其实就是一个双向链表,所谓的链表就是一个LinkList内部静态静态类(Node),对LinkList的所有操作本质上就是通过对LinkList中新建的Node对象 进 ...