• Testing and Debugging

    • 防御性编程

      • 测试的几种情况
      • Bugs
      • Debugging
  • Exceptions and Assertions
    • try except else finally
    • Assertions
  • 练习题笔记

7 Testing and Debugging

防御性编程

  • 一开始设计程序时就要考虑到应当便于testing和debugging
  • 把程序分割成可以分别测试和调试的的几个小部分
  • 在程序的开头要注释,来说明程序的输入和输出
  • 代码间注释

测试的几种情况

正确的测试顺序
1. 单元测试
2. 回归测试
3. 集成测试
很多人会急于运行整个程序进行测试,很容易出bug。正确的做法是从小到大一步步测试。

测试的几个角度:

  • 直觉
  • 随机测试
  • 黑盒测试(基于功能)
  • 白盒测试(通过源代码)

黑盒测试

白盒测试

Bugs

  • Overt 显性 vs. Covert 隐性
  • Persistent 持续 vs. Intermittent 间歇
  • 隐性和间歇性的bugs很难找

Debugging

  • steep learning curve 陡峭的学习曲线
  • goal is to have a bug-free program
  • tools
    • built in to IDLE and Anaconda
    • Python Tutor
    • print statement
    • use your brain, be systematic in your hunt

Logic errors - Hard

  • think before writing new code
  • draw pictures, take a break
  • explain (not just read) the code

Don’t and Do

8 Exceptions and Assertions

python常见错误类型
  AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
  NameError:试图访问的变量名不存在
  SyntaxError:语法错误,代码形式错误
  IOError:输出输入错误
  KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
  IndexError:索引错误
  TypeError:类型错误
  ZeroDivisonError:除数为0错误
  ValueError:值错误
  

try, except, else, finally

  • 能够顺利执行try语句时才执行else语句,如果出现exception则不执行else
  • 总是要执行finally


  
手动设置需要抛出的错误提示


  

Assertions

用断言来确认某些期望的情况

def avg(grades):assert not len(grades) == 0, 'no grades data' # 如果grades为空,抛出提示return sum(grades)/len(grades)

可以使用assertions来及时指出不符合条件的地方,而不用手动添加各种print来寻找bug,可以用于检查输入输出是否符合要求

    

可以使用assertions来检查数据种类、数据结构、限制条件是否符合要求


练习题笔记:

d.get(key,default)
如果字典d中有指定的key,返回其对应的值;否则返回default。如果没有指定default,则返回None

===>这样可以避免从字典中取值时抛出KeyError

 例如:

def getFrequencyDict(sequence):"""Returns a dictionary where the keys are elements of the sequenceand the values are integer counts, for the number of times thatan element is repeated in the sequence.sequence: string or listreturn: dictionary"""# freqs: dictionary (element_type -> int)freq = {}for x in sequence:freq[x] = freq.get(x,0) + 1  # 统计频次的简洁代码,且可避免抛出KeyErrorreturn freq

   
Mutable Sequence Types

operation result
s.clear() removes all items from s (same as del s[:])
s.copy() creates a shallow copy of s (same as s[:])

  
===>可以使用.copy()方法来复制字典

print(content, end=someting)
end表示print将如何结束,默认为end=”\n”。

In:

print('Hello', end=' ')
print('world', end='')
print('!')

Out:

Hello world!

转载于:https://www.cnblogs.com/huidanz/p/8543239.html

MITx - 6.00.1x 笔记(4) Good Programming Practices相关推荐

  1. CS入门学习笔记5-MIT 6.00.1x

    MIT 6.00.1x 第五讲-递归Recursion ** iterative algorithms-- 迭代算法 作业一 Write an iterative function iterPower ...

  2. 读书笔记--Head First Programming 目录

    1. 转载于:https://www.cnblogs.com/0x2D-0x22/p/4059191.html

  3. MIT.6.00.1X --Week 3 Lecture 5 -- 'Divid and conqer' algorithm 分而治之

    –解决一个困难的时候把它分解成几个子问题 –子问题比初始问题要简单 –再结合子问题的解决方案处理初始问题 Example of "Palindrome": def isPalind ...

  4. python零基础能学吗 知乎-如何零基础入门 Python?

    从17年6月入门Python到今天有大半年了,总结一下这半年来自学Python的路径. 本人只在两年前接触过HTML和CSS,但严格来说这两门只能算是标记语言而非编程语言,而且开始学Python的时候 ...

  5. A WORDGAME: HANGMAN

    这道题是EDX上的课程:MITx: 6.00.1x Introduction to Computer Science and Programming Using Python 第三周的作业题,是猜单词 ...

  6. OREILLY Programming .NET 3.5 读书笔记之一

    OREILLY Programming .NET 3.5 读书笔记之一 <Programming .NET 3.5>是OREILLY 2008.08出版的.NET 3.5 开发书籍,作者是 ...

  7. 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day01~day10)(2015年11月17日20:51:59)

    本笔记是个人笔记+摘录笔记相结合,非完全原创 day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定 ...

  8. 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)

    day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复 ...

  9. 《Oracle PL/SQL实例精讲》学习笔记1——数据准备

    前言: 古人言,"业精于勤荒于嬉,行成于思毁于随".对于自己所从事的工作,若使理论知识和实践经验相辅相成,则可使自己的业务能力日益增长,事半功倍.反之,亦然. 前几天,接到一个需求 ...

最新文章

  1. RESTful之视图概览和视图说明
  2. C/S与B/S架构的区别和优缺点
  3. js高程(二)-----继承
  4. 线程安全与锁优化(思维导图)
  5. java abstractset 继_java集合框架-AbstractSet
  6. 【CF1182D】Complete Mirror【树的重心】
  7. vscode设置templates_在VScode中创建你的代码模板的方法
  8. 什么是OAuth 2.0
  9. java digests.generatesalt_Java DigestUtils.sha1Hex方法代碼示例
  10. 【Linux】【Commands】文本查看类
  11. Android开发 ——线性布局文件、TextView、ListView的基本写法
  12. 获取httpservletrequest所有参数的名称和值
  13. 单位与单位的换算(二)
  14. Linux kernel crash定位
  15. STM8L RTC总结初始化和配置
  16. ubuntu18.04 卸载Anaconda3
  17. Linux操作命令分类详解 - 目录文件(二)
  18. 虚拟pc服务器 翻译,单机服务器配置文件;ServerSettings.ini【翻译】
  19. NLP 分类问题的讨论
  20. Referer的作用

热门文章

  1. PyTorch 1.9发布!移动端疯狂更新
  2. 收藏 | EfficientNet模型的完整细节
  3. 【资源下载】旷视研究院张祥雨valse2019报告PPT——高效轻量级深度模型的研究与实践
  4. C++编程积累——C++实现十进制与八进制之间的互相转换
  5. 使用Seq2Seq+attention实现简单的Chatbot
  6. 热传导/物质扩散算法应用于推荐
  7. mysql text 函数的使用方法_MySQL空间数据操作:GeomFromText()和astext()函数报错解决...
  8. mysql常用的yu语句_常用mysql语句备份
  9. mysql 插入 point_mysq Point类型 查询和插入操作:insert和select
  10. Jrebel 激活方式