day27

面向对象的总结

异常处理

错误的分类
  • 语法错误
if

if 2>1
print(222) dic = {"name"; "alex"}
  • 逻辑错误
num = int(input("请输入数字"))

dic = {"name": "海狗", "age": 18}
dic["hobby"]
什么是异常?

代码发生异常错误之后,你的程序就中断了

异常处理?

当代码出现异常时,我通过某种方式不让你的程序中断,合理的“跳”过去,异常处理

为什么要有异常处理?
  • 用户体验良好
  • 使你的代码更有健壮性,容错性
异常处理的两种方式
  • 利用if只能处理简单的异常,如果异常需要考虑的方面比较多,不适合
  • 利用try的方式进行异常处理
try的尝试
try:
num = int(input("请输入序号")) # 出现ValueError错误之后,直接跳转到except语句
print(111)
except ValueError:
print(666) try:
dic = {"name": "嘉欣"}
print(dic["age"])
num = int(input("请输入序号")) # 出现ValueError错误之后,直接跳转到except语句
print(111)
except ValueError:
print(666) # 报错
结构1:单分支
try:
num = int(input("请输入序号")) # 出现ValueError错误之后,直接跳转到except语句
dic = {"name": "嘉欣"}
print(dic["age"])
print(111)
except ValueError:
print(666)
结构2:多分支
try:
num = int(input("请输入序号")) # 出现ValueError错误之后,直接跳转到except语句
dic = {"name": "嘉欣"}
print(dic["age"])
l1 = [1,2]
print(l1[100])
print(111)
except ValueError:
print("输入的有非数字元素")
except KeyError:
print("没有此键")
except IndexError:
print("没有此下表")
结构3:万能异常

万能异常:处理所有python识别的异常

try:
dic = {"name": "嘉欣"}
print(dic["age"])
l1 = [1,2]
print(l1[100])
print(111)
except Exception as e:
print(e)
print(666)
什么时候用万能异常?

如果你对错误信息不关心,只是想要派出错误让程序继续运行,用万能异常

什么时候用多分支?

如果你对错误信息要进行明确的分流,让你的程序多元化开发,则使用多分支

# 之前的写法:
# num = input("输入序号")
# if num.isdecimal():
# num = int(num)
# if 0 < num < 5:
# if num == 1:
# pass # func()
# else:
# print("请输入数字") def func():
pass def func1():
pass dic = {
1: func,
2: func1
}
try:
num = int(input("请输入序号"))
dic[num]()
except ValueError:
print("请输入数字")
except KeyError:
print("请输入范围内的序号")
结构4:多分支+万能异常
def func():
pass def func1():
pass dic = {
1: func,
2: func1
}
try:
num = int(input("请输入序号"))
dic[num]()
except ValueError:
print("请输入数字")
except KeyError:
print("请输入范围内的序号")
except Exception:
print("程序出现意料之外的错误...")
结构5: try else finally

except 必须依赖于try,else必须依赖于except和try

finally只是依赖于try

try:
dic = {"name": "嘉欣"}
print(dic["age"])
l1 = [1,2]
print(l1[100])
print(111)
except KeyError:
print("没有此键")
except IndexError:
print("没有此下标")
else:
print("如果没有出现异常则执行这里")
finally:
print("finally 666")
  • finally:在异常出现之前,执行finally语句
try:
dic = {'name': '嘉欣'}
print(dic['age'])
l1 = [1, 2]
print(l1[100])
# except KeyError:
# print('没有此键')
# except IndexError:
# print('没有此下标')
# except IndexError:
# pass
finally:
print('finally 666')
  • finally用途

用在 关闭数据库链接,文件句柄关闭,数据保存等

# with open('test1',encoding='utf-8',mode='r+') as f1:
# try:
# for i in f1:
# print(i)
# if ....:
# finally:
#
# f1.close() # 在return结束函数之前,执行finally代码.
# def func():
# try:
# print(111)
# return 666
# finally:
# print(222)
# print(func())
结构6:主动触发异常
raise ValueError("出现了value错误")
结构7

断言:展现出一种强硬的态度

# assert 条件
name = "alex"
n1 = input("请输入:")
assert name == n1
print(111)
print(222)
结构8:自定义异常

python中给你提供的错误类型很多,但不是全部的错误

class LiYeError(BaseException):
def __init__(self, msg):
self.msg = msg def __str__(self):
return self.msg try:
# 三行
raise LiYeError('socket.connent.....')
except LiYeError as e: # e = LiYeError("类型错误)
print(e)

day27——面向对象的总结、异常处理的更多相关文章

  1. 简学Python第六章__class面向对象编程与异常处理

    Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群  群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...

  2. day27 面向对象

    day27 面向对象 目录 day27 面向对象 一.面相对象介绍 1 什么是对象 2 类于对象 二.实现面向对象编程 1 先定义类 2 属性访问 2.1 调用dict方法 2.2 类.属性 3 调用 ...

  3. Python面向对象补充以及异常处理

    面向对象相关内容 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(o ...

  4. Python3基础(6)面向对象编程、异常处理

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  5. python面向对象其他相关-异常处理-反射

    1.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象   2.issubclass(sub, super) 检查sub类是否是 super 类的派生类 n1 = 10 ...

  6. python 面向对象(五)约束 异常处理 MD5 日志处理

    ###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...

  7. day 018 面向对象--约束和异常处理

    ---恢复内容开始--- 主要内容; 类的约束 异常处理 自定义异常 MD5加密 日志 一  类的约束 (约束是对类的约束,) 看个例子: 这是领导分配给每个人的项目,要求每人写个功能 结果如下: 例 ...

  8. 第八章:Python基础の面向对象(二)

    本課主題 面向对象的多态 面向对象的成员 成员修饰符 特殊成员 面向对象其他应用 异常处理 设计模式与单例模式 面向对象的多态 指定参数类型只是多态的一种表现 另外一种是允许自己类型和自己的子类型(典 ...

  9. C错误异常处理,异常处理

    预处理器标识#error的目的是什么啊? 指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编 ...

随机推荐

  1. Linux 系统管理——文件系统与LVM、磁盘配额实例

    1.为主机增加80G SCSI 接口硬盘 2.划分三个各20G的主分区 3.将三个主分区转换为物理卷(pvcreate),扫描系统中的物理卷 4.使用两个物理卷创建卷组,名字为myvg,查看卷组大小 ...

  2. libreoj #10153 树形dp

    $des$ 有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点.这棵树共 NNN 个节点,标号 1 至 N,树根编号一定为 1. 我们用一根树枝两端连接的节点编号描述一根树枝的位 ...

  3. nodejs之express生成项目[windows平台]

    安装nvm,nvm下载地址   用于管理多个版本node,此处可省略! 安装nodejs,nodejs下载地址    淘宝镜像 安装cnpm命令,后面包可以使用cnpm命令安装,此处可省略,如果安装了 ...

  4. python 判断一个字符串组合后,是否在另一个字符串中

    code #coding=utf- def getdic(s): dic = {} for i in s: if (i not in dic): dic[i] = else: dic[i] += re ...

  5. Linux 把进程为D(不可中断进程)转换成其他状态

    问题现象:当前集群跑hadoop的时候,,任务失败,但是跑任务的容器没有正常退出,显示一大堆的YarcChild进程,,more /proc/进程/status   查看其状态,进程为D(disk s ...

  6. Spring Boot YML 掀翻 Properties!!

    .properties 配置文件大家应该都很熟悉,键值对嘛,.yml 配置文件栈长也是从 Spring Boot 开始了解到的. 那么,这两种格式的配置文件到底有哪些区别呢?哪个更好?能不能替换代替? ...

  7. 第10组 Alpha冲刺(4/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...

  8. shell case例子

    -- --

  9. http各类型请求方法工具总结

    本文为博主原创,未经允许不得转载: 在项目中会用到各种类型的http请求,包含put,get,post,delete,formData等各种请求方式,在这里总结一下 用过比较好的请求工具,使用serv ...

  10. docker安装并运行redis

    拉取镜像: [mall@VM_0_7_centos ~]$ sudo docker pull redis:3.2 [sudo] password for mall: 3.2: Pulling from ...