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('0')
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,这里暂不赘述