一、什么是异常

程序运行过程中错误发生的信号。(如果运行时产生的异常,程序不处理就会被抛出,随之会造成程序终止)

二、异常的种类

首先,异常主要分为语法错误逻辑错误两种类型

语法错误会在程序还没有执行前就会被检测出,所以针对语法错误,我们就要在程序执行前解决掉。

# 语法错误示范:
if def foo
pass class Bar:
pass

逻辑错误只有在程序执行过程中会被检测,不处理会就会被抛出,导致程序终止。

# 逻辑错误示范:
l=[11,22,33]
l[4]
xxx
d = {'a': 1, 'b': 2}
d['z']

我们常见的逻辑错误类型有哪些??

AttributeError   试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError    常见的语法错误
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

三、异常处理

既然有异常发生,那我们就要设法捕捉异常,不能因为异常而导致程序的终止。

如果我们能预知错误的发生条件时,那我们就应该用if判断去处理,在异常发生之前先进行预防。

num = input('请输入数字>>:').strip()

if num.isdigit():   # 我们知道只有在num为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
num = int(num) num += 1
print(num)

如果我们无法预知错误发生的条件时,则需要用到try...except:在错误发生之后进行处理。

try:
print('===1')
l = [1, 2, 3]
l[11]
print('====3')
d = {'a': 1, 'b': 2}
d['z']
print('===5')
except IndexError:
print('没有执行"l[11]"下面的代码')
except KeyError:
print('KeyError') else:
print('放在最后执行,前提是try内的代码没有异常发生,才会执行else') finally:
print('finally放在最后执行,无论try内的代码有没有异常发生都会执行')
print('你好啊') # ===1
# 没有执行"l[11]"下面的代码
# finally放在最后执行,无论try内的代码有没有异常发生都会执行
# 你好啊

当我们不知道会发生的错误类型时,就需要用到万能异常捕获!!

try:
code1
code2
code3
code4 except Exception as e:
print(e)
class EgonException(BaseException):
def __init__(self,msg):
self.msg=msg def __str__(self):
return self.msg try:
raise EgonException('类型错误')
except EgonException as e:
print(e)

自定义异常类

主动产生异常:raise的用法

# raise 一般用于自定义程序的控制逻辑或系统资源被无限占用时
class People:
def __init__(self,name,age):
self.__name = name
self.__age =age def set_inter(self,name,age):
# 控制用户的修改格式
if not isinstance(name,str):
raise TypeError('name must be str')
if not isinstance(age,int):
raise TypeError('age must be int')
self.__name = name
self.__age = age obj = People('jack',12)
obj.set_inter('peter',25)
print(obj.__dict__) # {'_People__name': 'peter', '_People__age': 25}

python下的异常处理的更多相关文章

  1. python下异常处理

    1.python下异常如何处理: #encoding=utf-8 """ python遇到异常,程序直接运行 try: "判断有可能抛出异常的代码" ...

  2. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

  3. Python基础---python中的异常处理

    Python中的异常处理 一.什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) ...

  4. [Python Study Notes]异常处理

    正则表达式 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理 断言(Assertions) python标准异常 ...

  5. Python系列之 - 异常处理

    python提供的异常处理 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常 ...

  6. Python异常和异常处理

    Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...

  7. python中的异常处理机制

    python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...

  8. Python 入门 之 异常处理

    Python 入门 之 异常处理 1.异常处理 (1)程序中的错误分为两种 <1> 语法错误 (这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范 ...

  9. python面向对象07/异常处理

    python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...

随机推荐

  1. NOIP2002普及组复赛B 选数

    题目链接:https://ac.nowcoder.com/acm/contest/230/B 题目大意: 略 分析: DFS模板题. 代码如下: #include <bits/stdc++.h& ...

  2. Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块

    StringIO StringIO操作 BytesIO BytesIO操作 file-like对象 路径操作 路径操作模块 3.4版本之前:os.path模块 3.4版本开始 建议使用pathlib模 ...

  3. Shell命令-文件及目录操作之cp、find

    文件及目录操作 - cp.find 1.cp:复制文件或目录 cp命令的功能说明 cp命令用于复制文件或目录. cp命令的语法格式 cp [OPTION]... SOURCE... DIRECTORY ...

  4. 洛谷P2822 组合数问题(题解)

    https://www.luogu.org/problemnew/show/P2822(题目传送) 先了解一下有关组合数的公式:(m在上,n在下) 组合数通项公式:C(n,m)=n!/[m!(n-m) ...

  5. CNN:Channel与Core的高H、宽W的权值理解

    转自: 知乎问题[能否对卷积神经网络工作原理做一个直观的解释?https://www.zhihu.com/question/39022858]中YJango 的回答; 因总是忘记回答地址,方便以后查阅 ...

  6. pta编译总结1

    打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号: ...

  7. 20175221 实验一《Java开发环境的熟悉》实验报告

    20175221 实验一<Java开发环境的熟悉>实验报告 (一)Linux运行结果 (二)IDEA下Java程序开发.调试:学会通过调试(Debug)来定位逻辑错误   试验IDEA是否 ...

  8. Vue(小案例_vue+axios仿手机app)_首页(底部导航栏+轮播图+九宫格)

    ---恢复内容开始--- 一.前言                        1.底部导航(两种做法)                                         2.轮播图 ...

  9. codeforces-1140 (div2)

    A.维护一个前缀最大值,不断跳即可 #include <map> #include <set> #include <ctime> #include <cmat ...

  10. building tool的简单了解

    java常用的三种构建工具: Apache Maven ——主要用于构建Java项目的自动化工具. NetBeans IDE 支持 Maven 构建系统,可帮助您管理项目的依赖关系.构建.报告和文档. ...