Python3入门(十)——调试与测试
一、异常处理
1.try...except...finally...
这个也就是Java里的try...cath..finally...了,直接看经典代码:
try:
print("开始执行try...")
s = 1 / 0
print("计算结果是%s" % s)
except ZeroDivisionError as e:
print("异常为:", e)
finally:
print("执行finally...")
print("END...")
处理结果和意料是一样的:
开始执行try...
异常为: division by zero
执行finally...
END...
同样,可以并列捕捉多个异常:(此外在except后还可以接else:来处理没有异常)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
当然,以上的异常都是继承自BaseException(也就是Java的Exception啦.)
Python也不像Java一样,有时候强迫你去在出异常的地方捕获或抛出,只需要在调用的地方处理即可:
def foo(s):
return 10 / int(s) def bar(s):
return foo(s) * 2 def main():
try:
bar('')
except Exception as e:
print('Error:', e)
finally:
print('finally...')
2.记录错误
使用python内置的Logging模块即可
import logging
try:
print("开始执行try...")
s = 1 / 0
print("计算结果是%s" % s)
except ZeroDivisionError as e:
logging.exception(e)
finally:
print("执行finally...")
print("END...")
后面logging还可以通过文件进行记录,和Java的Log4j是一样的
3.抛出错误
通过raise关键字实现和Java一样的throw功能了
class MyException(ValueError):
pass def my_ex():
n = input("输入")
if n == 0:
raise MyException("输入错误,错误的值为%s" % n)
return n + 1
二、程序调试
1.print
万能的print,也就是Java的sout了。当然,这也仅仅是第一招了。也是新手常用的招了
2.断言
所有print()的地方都可以用断言assert来替代,print的小改版:
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n
3.logging
对应log4j的贴心配置
import logging
logging.basicConfig(level=logging.INFO) def my_ex():
n = input("输入")
if n == 0:
logging.info("INFO日志,变量n为:%s" % n)
return n + 1
更多logging配置,后续进阶篇补充
在Pycharm中断点调试与IDEA一样,同家族产品
4.pdb
这是python内置的调试器。当然了。这里当然使用熟悉的Pycharm了
三、单元测试
一个经典的单元测试如下:
import unittest class MyTest(unittest.TestCase):
def setUp(self):
print("setup...") # 以test开头的test_xx的就是测试方法
def test_key(self):
d = dict()
d['k'] = "value"
self.assertEqual(d['k'], "value") def tearDown(self):
print("tearDown...")
首先,单元测试类需要继承自unittest.TestCase
其次,以test_开头的的方法就是测试方法了,其中最常用的就是assertEqual来进行判断
再者,setUp,tearDown就相当于Java单元测试的Before和After了
四、文档测试
python中内置的doctest,这里暂不赘述
Python3入门(十)——调试与测试的更多相关文章
- 11 . Python3之异常,调试和测试
12.Python3入门之异常.调试和测试 在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修 ...
- Python魔术世界 1 如何使用Visual Studio在WIN10中一键安装Python3入门编程环境并测试Django
本文通过VS安装Python和Django的环境,创建了一个Web程序,前后5分钟的操作,让你快速入门Python的编程世界,各种Python和Django的概念会在实战中给你娓娓道来. Django ...
- 转 Python3 错误和异常/ Python学习之错误调试和测试
########sample 0 https://www.cnblogs.com/Simon-xm/p/4073028.html except: #捕获所有异常 except: <异常名> ...
- Python3入门机器学习经典算法与应用
<Python3入门机器学习经典算法与应用> 章节第1章 欢迎来到 Python3 玩转机器学习1-1 什么是机器学习1-2 课程涵盖的内容和理念1-3 课程所使用的主要技术栈第2章 机器 ...
- Python3入门机器学习经典算法与应用☝☝☝
Python3入门机器学习经典算法与应用 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 使用新版python3语言和流行的scikit-learn框架,算法与 ...
- python3入门之类
在面向对象的语言中,类是最重要的一环,python自然拥有类这个机制.python的类机制,与C++,java的区别不是很大,类的大多数的重要特性都被沿用了,一样可以多态,抽象,封装: python3 ...
- python3入门之函数
相信大家学习过其他语言,懂得函数的作用.简单的说函数最好的作用就是可以使程序变得懒惰.python作为后起之秀,当然也会拥有函数这个有用的东西: 创建函数 使用def语句即可创建函数,如创建一个用来生 ...
- Spring入门(十四):Spring MVC控制器的2种测试方法
作为一名研发人员,不管你愿不愿意对自己的代码进行测试,都得承认测试对于研发质量保证的重要性,这也就是为什么每个公司的技术部都需要质量控制部的原因,因为越早的发现代码的bug,成本越低,比如说,Dev环 ...
- 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议
1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...
- RabbitMQ调试与测试工具-v1.0.1 -提供下载测试与使用
最近几天在看RabbitMQ,所以发了两天时间写了一个调试和测试工具.方便使用. 下载地址:RabbitMQTool-V1.0.1.zip
随机推荐
- bootstrap和ajax相结合
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 最近见到一个用react native实现的标尺动画,不知道如何实现 帖两张图(新知食App)
很恶心,这款App的标尺没有做兼容,我在模拟上看不到效果,无法说明我想做出的东西的效果,无奈粘一张图吧! 就是这么一个屌样子,如何实现?
- SQLSERVER NULL和空字符串的区别 使用NULL是否节省空间
SQLSERVER NULL和空字符串的区别 使用NULL是否节省空间 这里只讨论字符串类型,int.datetime.text这些数据类型就不讨论了,因为是否节省空间是根据数据类型来定的 在写这篇文 ...
- EntityFramework 贪婪加载与延迟加载以及资源回收
EntityFramework的资源回收 1) Using 内包含Entity的上下文关系,对俩表做Add操作,最好可以直接写一个 entity.SaveChanges(); 完成两张表的同时add操 ...
- Mbps Mb M Kb如何换算
在传输单位的写法上,B 和 b 分别代表 Bytes 和 bits,两者的定义是不同的,具体换算公式如下:1 Byte = 8 bits 1 Kb = 1024 bits 1 KB = 1024 by ...
- 推荐linux下的数据库开发工具DBeaver 开源免费
linux下不错的数据库管理工具 DBeaver 操作比较友好,基于eclipse.使用jdbc链接,链接数据库非常全(oracle mysql mssql sqlite 常见的统统支持).而且可以 ...
- 【转】Nginx学习---深入浅出Nginx的介绍
[原文]https://www.toutiao.com/i6595428119933354500/ Nginx是一款轻量级的Web服务器.反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在 ...
- jQuery插件实例五:手风琴效果[动画效果可配置版]
昨天写了个jQuery插件实例四:手风琴效果[无动画版]那个是没有动画效果的,且可配置性不高,本篇为有动画效果.对于一些数据做了动态的计算,以实现自适应. 欢迎大家入群相互交流,学习,新群初建,欢迎各 ...
- .Net使用163smtp发送邮件时错误:邮箱不可用. has no permission解决方法
C#实现简单邮件发送代码如下 public static void SendAsync(string emailTo, string subject, string mailBody) { var m ...
- CountUp.js用法 让数字动起来的插件
CountUp.js 无依赖的.轻量级的 JavaScript 类,可以用来快速创建以一种更有趣的动画方式显示数值数据.尽管它的名字叫 countUp,但其实可以在两个方向进行变化,这是根据你传递的 ...