本文目录:

一、异常是什么

二、常见异常

三、异常处理

四、不太常用语法

五、主动判处异常

六、断言

七、使用场景

八、自定义异常类型

一、异常是什么

什么是异常?

异常是错误发生前的一种信号
如果没有人来处理这个信号 程序就会中断执行并抛出错误信息

异常的分类:

1.语法检查异常 这种异常是最低级异常 绝对不应该犯

也非常好避免
如果是编译器 会自动提示
如果是文本编辑器 在你运行代码前 解释器会检查语法

2.运行时异常(逻辑异常)

这种异常只有在代码被执行时才能发现
我们要处理的重点就是运行时异常

特点:在没有运行代码前 是无法发现的
如果运行时异常已经发生并且没有正确处理他 就抛出错误信息
并且中断程序的执行 这是要我们学习异常解决的问题

异常的组成

 1.追踪信息 (具体发生异常的位置 以及函数的调用顺序)
2.异常的类型 (错误的类型)
3.异常的消息 (详细的错误信息)
"""
我们之所以学习异常处理
为的是让我们的程序更加稳定 (健壮性) 不容易崩溃
"""
name =
def func():
import xxaaa def func1():
func() func1()

二、常见异常

"""
常见的发生原因:
NameError 找不到这个名字 要么变量 要么函数
ValueError 在调用一个函数时给的的值不正确
TypeError 类型错误 例如字符串与数字加减乘除 调用一个不能被调用的类型
ZeroDivisionError 除数不能为0
KeyError 没有这个key
IndexError 索引不存在
StopIteration 没有更多的值可以迭代
FileNotFoundError 文件不存在
io.UnsupportedOperation 文件的操作不支持
AttributeError 没有这个属性
KeyboardInterrupt 程序被强行终止 ctrl+c
"""
# print(helloword)
# age = int(input("请输入年龄:"))
# li = []
# li() # "abc" + 123 # 5 / 0
# with open(r"D:\上海python全栈4期\day31\异常处理\1今日内容","rt") as f:
# pass
# print(f)
# f.read() # dic = {"age":20}
# dic["sex"] # li = [1,2,3]
# print(li[-100]) # def my_iter():
# yield "a"
# yield "b"
# i = my_iter()
# print(next(i))
# print(next(i))
# print(next(i)) # f = open("test","rt")
# f.write("123") # li = []
# li.abc # import time while True:
pass

三、异常处理

"""
要处理异常
要学的就是一个新的语法 今后使用最多的写法:
try:
这里放可能出现异常的代码
except: 异常的类型:
当异常发生并且异常类型匹配时
执行except中的代码
注意:一旦try中有代码抛出了异常 后面的代码全都不执行 练习: 捕获某种类型的异常 捕获任意类异常 感受一下执行顺序
"""
#基本语法:
# print("staring.....")
# try:
# name
# except NameError:
# print("名字找不到!")
# print("end.......") # 多种异常类型处理
# print("staring.....")
# try:
# name
# [][-1]
# pass
# except NameError:
# print("名字找不到!")
# except IndexError:
# print("索引超出范围")
# print("end.......") # 当代码可能出现多种异常时的写法
# print("staring.....")
# try:
# # name
# # [][-1]
# 1/0
# pass
# except NameError:
# print("名字找不到!")
# except IndexError:
# print("索引超出范围")
# except ZeroDivisionError:
# print("除数不能为0")
# print("end.......") # 当代码可能出现多种异常时的写法2
# print("staring.....")
# try:
# {}["aaa"]
# # name
# # [][-1]
# 1/0
# except (NameError,IndexError,ZeroDivisionError):
# print("可能名字找不到! 可能所以超出范围 可能除数为0")
# print("end.......") # 上面两种写法 都可以处理多种异常 但是 异常类型太多了 不可能全写完
# 万能异常类型 Exception 或BaseException 基于OOP的继承和多态
print("staring.....")
try:
# {}["aaa"]
# name
# [][-1]
1/0
except Exception:
print("可能名字找不到! 可能所以超出范围 可能除数为0")
print("end.......")

四、不太常用的语法

"""
不太常用的
语法1
try:
except:
else: try中没有发生异常时执行 语法2
try :
except :
finally : 无论是否发生异常 都会执行finally 可以用来回收系统资源!
"""
# print("start...")
# try:
# # 1/0
# [][1]
# pass
# except ZeroDivisionError:
# print("除数异常")
# except NameError:
# print("名字异常")
# else:
# print("else会在 try中没有异常时执行")
# print("end...") # finally
# print("start...")
# try:
# # 1/0
# # [][1]
# pass
# except ZeroDivisionError:
# print("除数异常")
# except IndexError:
# print("索引异常")
# else:
# print("else会在 try中没有异常时执行")
# finally:
# print("finally 无论异常是否发生 都会执行!")
# print("end...") # 使用finally来回收资源
try:
f = open(r"D:\上海python全栈4期\day31\异常处理\1今日内容","rt",encoding="utf-8")
f.read()
# f.write("123")
except Exception:
print("发生异常了")
finally:
print("关闭文件!")
f.close() print(f.closed)

五、主动抛出异常

"""
当程序中有一些限制 然而用户没有遵守 我们可以主动抛出异常
语法:
raise 异常类型(异常的详细信息)
类型必须是BaseException的子类
"""
# raise NameError("这就是名字不存在异常!")

age = input("请输入整型的年龄:")
if not age.isdigit():
raise TypeError("你输入的不是整型!")
age = int(age)
print("十年后你%s岁" % (age + 10))

六、断言

"""
断言 可以理解断定 就是很清楚 很明确
什么时候需要断定?
下面的代码必须依赖上面代码的正确数据
语法: assert 结果为Bool的表达式
如果值为True 则继续往下执行
为False 抛出一个 AssertionError 表示断言失败
没有assert 也可以使用if来玩 assert 仅仅是简化了代码 """

# 第一部分代码 负责产生一个列表
li = []
# li.append(1)
# li.append(2)
# 这里一定要确保数据是有效的
# if len(li) < 1:
# raise ValueError("列表中没有数据!")
assert len(li) > 0
# 需要使用列表中的数据来完成任务 如果没有数据无法完成
print(li[0])
print(li[0])
print(li[0])
print(li[0])

七、使用场景

try:
print("业务逻辑分层复杂 写了好几百行!")
except Exception:
print("可能是文件不存在!")
try:
print("业务逻辑分层复杂 写了好几百行!")
except Exception:
print("类型不匹配!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
print("业务逻辑分层复杂 写了好几百行!")
except Exception:
print("有点问题!") # 不应该滥用try except
# 什么时候用? 如果你知道为什么出错 应该把代码修改正确 而不是加上try except
# 你不清楚为什么会发生异常! 这时候用try try:
f = open("xxxx","rt")
f.read()
except Exception:
print("文件不存在!")

八、自定义异常

"""
当系统提供的这些异常类型 和你要描述的错误不匹配时 就需要自定义异常类型
写法:
class 自定义异常类型名称(BaseException):
总结一下:之所以自定义异常类型 是为了更具体描述你的错误 让使用者一眼就看出了 关键点:1.如何自定义异常类型
2.在except中 使用as 来获取异常对象 """
# 你随便输入一句话 看我喜不喜欢  不喜欢我就抛出异常
# 自定义异常类
class UnlikeError(BaseException):
def __init__(self,msg,text):
self.msg = msg
self.text = text
# 函数中可能抛出异常
def hello():
text = input("输入一段话:")
if text == "你真帅":
print("你说得对!")
else:
raise UnlikeError("你再看看...","另一个参数")
# 捕获异常
try:
hello()
# 获取异常对象
except UnlikeError as e:
print(e.text)

python异常:常见异常、处理、断言、自定义异常的更多相关文章

  1. Python语言常见异常错误类型

    在运行或编写一个程序时常会遇到错误异常,这时python会给你一个错误提示类名,告诉出现了什么样的问题(Python是面向对象语言,所以程序抛出的异常也是类).能很好的理解这些错误提示类名所代表的意思 ...

  2. Python开发 常见异常和解决办法

    1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...

  3. Python异常类型及处理、自定义异常类型、断言

    异常的概念.识别报错信息 异常处理 断言的基本使用 异常类型(异常就是报错) 常见异常 NameError:名称错误 SyntaxError:语法错误 TypeError:类型错误 错误回溯 查看报错 ...

  4. python异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-3

    异常捕获 异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 影响:整个程序无法再正常运行 异常的结构 异常的类型 NameError 异常的信息 ...

  5. Python常见异常及常用单词翻译

    Python常见异常及常用单词意思 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportE ...

  6. Python中常见的异常总结

    Python中常见的异常总结 当Python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常. 一.异常错误    a.语法错误     错误一:     if     ...

  7. python中常见的一些错误异常类型

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的 ...

  8. python错误和异常

    一:语法错误syntax errors        熟悉语法! 二:异常 ①打印错误信息时,异常的类型作为异常的内置名显示,并以调用栈的形式显示具体信息    ②常见的异常:             ...

  9. Python错误和异常 学习笔记

    错误和异常概念 错误:     1.语法错误:代码不符合解释器或者编译器语法     2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行     1.程序遇到 ...

随机推荐

  1. 4. Linux管理命令

    df.du:磁盘.空间相关的命令 df -h 以直观的方式显示磁盘分区使用状况 df test 查询test属于哪个分区   du du -h 以直观方式显示文件夹目录的使用状况 du -s 只显示当 ...

  2. SpringBoot: 2.SpringBoot整合servlet(转)

    整合方式1:通过注解扫描完成 Servlet 组件的注册 1.编写servlet package com.bjsxt.servlet; import javax.servlet.ServletExce ...

  3. 求帮助 html5三次贝塞尔曲线问题

    <!DOCTYPE html><html><head><meta charset="utf-8"> <title>can ...

  4. 无监督异常检测之LSTM组成的AE

    我本来就是处理时间序列异常检测的,之前用了全连接层以及CNN层组成的AE去拟合原始时间序列,发现效果不佳.当利用LSTM组成AE去拟合时间序列时发现,拟合的效果很好.但是,利用重构误差去做异常检测这条 ...

  5. Spring源码分析(1)容器的基本实现——核心类介绍

    bean是Spring中最核心的东西,因为Spring就像是个大水桶,而bean就像是容器中的水,水桶脱离了水便也没什么用处了,那么我们先看看bean的定义. public class MyTestB ...

  6. POJ1988 Cube Stacking 【并查集】

    题目链接:http://poj.org/problem?id=1988 这题是教练在ACM算法课上讲的一道题,当时有地方没想明白,现在彻底弄懂了. 题目大意:n代表有n个石头,M a, b代表将a石头 ...

  7. [图像分割] OpenCV 的 GrabCut 函数使用和源码解读

    转自 zouxy09 GrabCut 原理参考这里,以下为 GrabCut 源码: ——看别人写的好的代码也很享受,干净利落,有些处理的细节也学习一下. /*M//////////////////// ...

  8. 无法执行vue初始化命令

    无法执行vue初始化命令:https://www.jianshu.com/p/9eb3cf854aa8 今天vue 初始化项目时提示错误 执行命令: npm install -g vue-cli 执行 ...

  9. Linux系列:进阶之tomcat安装

    思路:作者是在Windows上从Apache官网下载的tomcat,之后将tomcat文件放到我的ftp站点中,在Linux访问ftp站点下载tomcat文件 ,将tomcat放在我自己的安装目录中, ...

  10. DP大大大大大赏

    还是前置: 动态规划的三种实现方法: 递推,递归,记忆化搜索 然后还是从斐波那契数列开始引入: 两种求斐波那契数列的方法: 1.用其他位置的结果得到自己的结果: 2.用自己的结果算其他的结果: 以上两 ...