Python基础-异常
异常捕获
常见异常类型
Exception:顶级异常类,大部分异常类都是它的子类。
SyntaxError:语法错误
TypeError:类型错误
ValueError:值错误
NameError:找不到名称,比如变量名
IndexError:找不到索引,在序列中取值时出现
KeyError:映射中不存在键名,在字典中取一个不存在的key时出现
ZeroDivisionError:除法中除数为0时出现
FileNotFoundError:找不到文件错误
捕获指定异常
异常捕获的写法结构是try-except,下面模拟一个除数为0的异常。
a = 10
b = 0
try:
result = a / b
print(f"结果是:{result}")
except ZeroDivisionError:
print('除数不能为0')
打印结果:
除数不能为0
我们虽然捕获了ZeroDivisionError,但是也可能出现其他异常,比如a和b不是数字呢?那么我们如果想单独对每一种异常都进行精确捕获与提示的话,可以多写几个except,针对性处理。
a = 10
b = 'abc'
try:
result = a / b
print(f"结果是:{result}")
except ZeroDivisionError:
print('除数不能为0')
except TypeError:
print('类型错误')
打印结果:
类型错误
如果想多个异常统一处理,也可以同时捕获多个异常。
a = 10
b = 'abc'
try:
result = a / b
print(f"结果是:{result}")
except (ZeroDivisionError,TypeError) as e:
print(e)
打印结果:
unsupported operand type(s) for /: 'int' and 'str'
捕获所有异常
捕获所有异常是最省心的做法,你不用去纠结到底这段代码可能会出现哪些异常。
a = 10
b = 'abc'
try:
result = a / b
print(f"结果是:{result}")
except:
print('出现异常了') 打印结果:
出现异常了
主动抛出异常
raise语句对标java和PHP中的throw,作用是抛出异常。
a = 10
b = 0
try:
if b == 0 : raise Exception('竟然是0!')
result = a / b
print(f"结果是:{result}")
except Exception as e:
print(f'出现异常了:{e}')
打印结果:
出现异常了:竟然是0!
raise不仅可以在try-except语句块里面用,也可以在全局使用,在try-except里面抛出异常,会被except捕获,如果在没有try-except代码中使用的话,异常就会向上传递,传给调用方,直到传到主程序全局空间,然后停止程序运行,打印出栈跟踪信息。
未发生异常时
try-except语句还可以包含else代码块,让我们可以像条件判断一样进行异常处理,如果出现异常怎么办,如果没有异常又怎么办。
a = 10
b = 2
try:
if b == 0 : raise Exception('竟然是0!')
result = a / b
print(f"结果是:{result}")
except Exception as e:
print(f'出现异常了:{e}')
else:
print('程序一切正常')
打印结果:
结果是:5.0
程序一切正常
扫尾工作
try-except还有一个finally代码块,无论是否异常都一定会执行finally代码块中的代码,比如打开文件之后做一些业务处理,无论过程是否出现异常,都必须要关闭文件,那么关闭文件的操作就应该放在finally代码块中。
a = 10
b = 0
try:
if b == 0 : raise Exception('竟然是0!')
result = a / b
print(f"结果是:{result}")
except Exception as e:
print(f'出现异常了:{e}')
else:
print('程序一切正常')
finally:
print('扫尾工作清理')
打印结果:
出现异常了:竟然是0!
扫尾工作清理
自定义异常
自定义异常类需要继承Exception类,直接继承或间接继承都可以。
class MyError(Exception):
pass try:
raise MyError('随便抛')
except MyError as e:
print(f'捕获到了自定义异常:{e}')
打印结果:
捕获到了自定义异常:随便抛
如果你愿意,也可以在自定义异常类中覆盖父类的构造函数,或者添加方法都可以。
Python基础-异常的更多相关文章
- python基础-异常(exception)处理
python基础-异常(exception)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 程序中难免出现错误,而错误分成两种,即语法错误和逻辑错误.语法错误根本过不了pyth ...
- python基础--异常,对象和迭代器
异常处理 面向对象 迭代器和生成器 python异常处理 下面代码触发了一个FileNotFoundError >>> open("notexist.txt") ...
- python基础-----异常问题
---恢复内容开始--- 当发生python不知所措的错误时,python会创建一个异常对象, 如果你编写处理该异常的代码,程序将会继续运行: 如果你未对异常做任何处理,程序将会停止,并显示一个tra ...
- python基础-异常和模块
异常的定义 #encoding=utf-8 import sys try: 1/0 print "never executed!" except ZeroDivisionError ...
- Python基础——异常
捕捉所有异常 for i in range(10): try: input_number=input('write a number') if input_number=='q': break res ...
- 【原】Python基础-异常
def cacls(x, y): try: return x/y except ZeroDivisionError: print("y can not be zerp") exce ...
- Python基础学习笔记(十三)异常
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-exceptions.html Python用异常对象(excep ...
- Python基础+模块、异常
date:2018414+2018415 day1+2 一.python基础 #coding=utf-8 #注释 #算数运算 +(加) -(减) *(乘) /(除) //(取整) %(取余) ...
- 十九. Python基础(19)--异常
十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <............. ...
随机推荐
- Linux下如何寻找相同文件?
大家好,我是良许. 随着电脑的使用,系统里将产生很多垃圾,最典型的就是同一份文件被保存到了不同的位置,这样导致的结果就是磁盘空间被大量占用,系统运行越来越慢. 所以如果你的电脑空间告急的话,可以试着去 ...
- Apollo配置中心的实战
31.携程 Apollo 配置中心介绍~1.mp4 32.Apollo核心概念~1.mp4 32.Apollo核心概念~1.mp4 每个应用需要有一个唯一的AppID 要在指定的机器上的server. ...
- ImageLoader在Listview中的使用
图片加载框架之ImageLoader 1_特点 1)多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 2)支持随意的配置ImageLoader,例如线程池 ...
- 多线程集成设计模式--future模式
多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future.Master-Worker.Guard Susperionsion 一.什么是Future模型: 该模型是将异步请求和代理 ...
- linux test tool--"ab"
install(ubuntu os): sudo apt-get install apache2-utils usage: ab -c 200 -t 100 http://localhost:8001 ...
- java语言基础(六)_String类_static_Arrays类_Math类
String类 1. 使用 java.lang.String类代表字符串.lang包含的包不用特意引用,即默认已经引用了. API当中说:Java 程序中的所有字符串字面值(如 "abc&q ...
- JVM源码分析之Java对象头实现
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Java对象头实现 HotSpot虚拟机中,对象在内存中的布局分为三 ...
- Netty 源码解析(八): 回到 Channel 的 register 操作
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365篇原创计划”第八篇. 接下来的时间灯塔君持续更新Netty系列一共九篇 Netty 源码解析(一): 开始 Netty 源 ...
- Python 简明教程 --- 22,Python 闭包与装饰器
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 当你选择了一种语言,意味着你还选择了一组技术.一个社区. 目录 本节我们来介绍闭包与装饰器. 闭包与 ...
- 每日一题 - 剑指 Offer 47. 礼物的最大价值
题目信息 时间: 2019-07-02 题目链接:Leetcode tag:动态规划 难易程度:中等 题目描述: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0). ...