Python错误的处理方法
作者:认真对待世界的小白 发布时间:2021-08-01 05:38:15
异常的捕获与处理
什么是错误
简而言之:还没运行,在语法解析的时候,就发现语法存在问题,这个时候就是错误。
什么是异常
简而言之:代码写好之后,无明显语法错误(这个时候,编辑器不知道有错,语法解析时也不知道有错),但是运行的时候,会发生错误,这个时候称之为异常。
什么是警告
import warnings
def fxn():
warnings.warn("deprecated", DeprecationWarning)
异常怎么处理
异常的处理形式如下:
try:
你要做的可能会发生异常的事
except 可能会发生的异常:
发生异常之后要做的事
except 可能会发生的异常2:
发生异常之后要做的事2
finally:
最终要做的事情
比如下面的代码:
try:
print(10/0)
except ZeroDivisionError:
print("除数不能为0")
这个时候再次运行,就不会再出现异常
在平时的开发中,也会使用预定义清理的操作,来避免因为异常而导致程序奔溃,比如在进行IO操作的时候,可以使用:
with open("myfile.txt") as f:
for line in f:
print(line, end="")
这样一旦运行时发生异常,程序会自动帮你关闭文件,避免整个程序奔溃
自定义异常与异常的抛出
虽然python中提供了非常多的内置异常类,但是,在平时开发中,针对特定的业务,可能需要自定义异常,此时怎么办?
通过自定义继承Exception类的类,可以实现异常的自定义
class MyException(Exception):
def __init__(self, parameter):
err = '非法入参{0},分母不能为0'.format(parameter)
Exception.__init__(self, err)
self.parameter = parameter
当我们代码中碰到某种特殊业务情况,需要向调用方抛出自定义异常,可以使用 raise 关键字
from chapter12.my_exception import MyException
def my_fun(x):
if x == 0:
raise MyException(x)
return 12/x
print(my_fun(-12))
我们在捕获异常之后,也可以直接将异常抛出,此时直接使用 raise 关键字即可
def my_func():
try:
print(10 / 0)
except ZeroDivisionError:
print("除数不能为0")
# 此处直接将捕获的异常抛出
raise
单元测试
什么是单元测试
单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
简而言之:就是写一段代码,用来验证另一段代码在特定情况下的正确性
单元测试的好处与“坏处”
好处:减少bug、提高代码质量、可以放心重构(在未来修改实现的时候,可以保证代码的行为仍旧是正确的)
"坏处":占用开发时间,尤其是在起步阶段
在python中,如何编写单元测试
1、新建python文件,编写具体业务代码
class MyTest():
def my_add(self, a, b):
return a + b
2、右键类名,选择Go TO ==》test,或者直接 ctrl+shift +t
3、填写好相应的模块名及测试类名,点击ok,此时pycharm会帮我们自动创建测试模块及类
4、编写测试代码,并执行单元测试
import unittest
from unittest import TestCase
from test import MyTest
class TestMyTest(TestCase):
def test_add(self):
s= MyTest()
self.assertEqual(s.my_add(1,5),6)
if __name__ == "__main__":
unittest.main()
来源:https://www.cnblogs.com/jwen1994/p/13127651.html


猜你喜欢
- 傅立叶级数的介绍我就不说了,自己也是应用为主,之前一直觉得很难懂,但最近通过自己编程实现了一些函数的傅立叶级数展开之后对傅立叶 级数展开的概
- 有的时候,为了对python文件进行加密,会把python模块编译成.pyd文件,供其他人调用。拿到一个.pyd文件,在没有文档说明的情况下
- 某日,路上收到用户咨询,为了清除空间,想删除某200多G大表数据,且已经确认此表不再有业务访问,于是执行了一条命令‘de
- 1. 简介NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数
- 本文实例讲述了python和mysql交互操作。分享给大家供大家参考,具体如下:python要和mysql交互,我们利用pymysql这个库
- 从 webpack book 的 Loading Assets 一章中延申出来。改善前端项目体验中,很重要的点就是静态资源的优化。它是由于浏
- 用js判断复选框是否选中及选中个数,以前经常有朋友提到复选框的选中问题,这段代码可以帮你解决这个问题,而且它还可以判断你选择了多少个复选框,
- Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)
- 这篇文章主要介绍了简单了解为什么python函数后有多个括号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 当你在浏览网页时,看到一个很漂亮的特效,你查看源代码时看到的是一队乱码,那多扫兴呀!根据本人的研究,总结出了三种解密方法,与大家分享!!方法
- 全局引用公共的组件及公共的JS文件1. 创建一个公共的目录 timeline ,里面包含 timeline.js 和 timeline.vu
- Scrapy框架简单介绍Scrapy框架是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取结构性数据而编写的应用
- Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都需要
- <% String st = ""; for(int i = 1; i <= 9;
- 如何显示一个等待或欢迎信息? <% Response.Buffer = True %
- 目录技术背景diagrams的安装基础逻辑关系图组件簇的定义总结概要技术背景对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较
- 这篇文章主要介绍了django序列化serializers过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- Q:Dreamweaver(简称DW)中如何输入空格?A:按下“Ctrl+Shift+空格键”或者在中
- 如果 replaceText 为函数,对于每一个匹配的子字符串,调用该函数时带有下面的 m+3 个参数,此处 m 是在 rgExp 中捕获的
- pandas.DataFrame中的现有列分配给索引index(行名,行标签)。为索引指定唯一的名称很方便,因为使用loc,at选择(提取)