一、常见异常及场景举例

 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. HttpSession解决表单的重复提交

    1). 重复提交的情况: ①. 在表单提交到一个 Servlet, 而 Servlet 又通过请求转发的方式响应一个 JSP(HTML) 页面, 此时地址栏还保留着 Serlvet 的那个路径, 在响 ...

  2. What is the AppData folder?

    Applies to Windows 8.1, Windows RT 8.1 The AppData folder contains app settings, files, and data spe ...

  3. jeecms如何迭代list集合

    [@cms_channel_list][#list tag_list as a ]${a.name} [/#list][/@cms_channel_list]使用[XXX_list] 参数为 tag_ ...

  4. JS 换行写法

    var populatePullUpHtml = function (id) { var html = '<div id="' + id + '" class="' ...

  5. 所谓IIS未注册引起的故障及解决

  6. DFT到FFT的理解

    DFT简化计算理解(FFT)   DFT: WN=e^(-j*2*pi/N) DFT复杂度o(N^2) 降低与N^2的依赖 使N = LM  (L^2+m^2 <= N^2) N点DFT分解为M ...

  7. 「POJ 2699」The Maximum Number of Strong Kings

    题目链接 戳我 \(Describe\) 一场联赛可以表示成一个完全图,点表示参赛选手,任意两点u, v之间有且仅有一条有向边\((u, v)\)或\((v, u)\),表示\(u\)打败\(v\)或 ...

  8. Quicksort------代码之美

    #include<iostream> #include<cstdlib> #include<time.h> using namespace std; void sw ...

  9. SpringMVC 入门程序

    SpringMVC是什么 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spr ...

  10. Codeforces Round #545 (Div. 2)C(离散化,思维,PAIR排序)

    #include<bits/stdc++.h>using namespace std;int a[1007][1007];pair<int,int>p1[1007],p2[10 ...