2019独角兽企业重金招聘Python工程师标准>>>

python 内置了一套try...except...finally...的错误处理机制;

try:print 'try'r = 10 / 0print 'result:', rexcept ZeroDivisionError, e:print 'except:', efinally:print 'finally'结果:
try
except: integer division or modulo by zero
finally

finally语句块是一定会执行的;

此外,如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句:

try:print 'try'r = 10 / 1print 'result:', rexcept ZeroDivisionError, e:print 'except:', eelse:print 'no error'
finally:print 'finally'结果:
try
result: 10
no error
finally

Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里:

https://docs.python.org/2/library/exceptions.html#exception-hierarchy

可以导入logging模块记录异常到日志文件中;

import logging

logging可以指定信息的级别:debug,info,warning,error这几个级别,你可以指定该文件的日志级别

import logging
logging.basicConfig(level=logging.INFO)

logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件

rasie将错误进行抛出,这种办法不仅可以解决了不知道如何处理的情况;同时可以改变抛出错误的类型;

try:print 'try'r = 10 / 0print 'result:', rexcept ZeroDivisionError, e:print 'except:', eraise ValueError(e)finally:print 'finally'结果:
try
except: integer division or modulo by zero
finally
Traceback (most recent call last):File "F:/hz_viking/PycharmProjects/django_demo/WebBase/apps/cm/syc/varibleScope.py", line 353, in <module>raise ValueError(e)
ValueError: integer division or modulo by zero

断言:

用assert(断言)去替代print;

def test(i):try:print 'try'assert i != 0,  'i is zero' # 断言i是否为0,如果为False,就会打印后面的说明except ZeroDivisionError, e:print 'except:', eraise ValueError(e)finally:print 'finally'test(0)结果:
Traceback (most recent call last):File "F:/hz_viking/PycharmProjects/django_demo/WebBase/apps/cm/syc/varibleScope.py", line 358, in <module>test(0)File "F:/hz_viking/PycharmProjects/django_demo/WebBase/apps/cm/syc/varibleScope.py", line 349, in testassert i != 0,  'i is zero'
AssertionError: i is zero

程序中如果到处充斥着assert,和print相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert

python -O err.py

单元测试:

为了编写单元测试,我们需要引入Python自带的unittest模块:

import unittest
class TestDict(unittest.TestCase):def test_init(self):d = {'java':'diffcult', 'python':'midle'}self.assertEqual(d.get('java'), 'diffcult')

编写单元测试时,我们需要编写一个测试类,从unittest.TestCase继承。

以test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行。

单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。

单元测试的测试用例要覆盖常用的输入组合、边界条件和异常。

单元测试代码要非常简单,如果测试代码太复杂,那么测试代码本身就可能有bug。

单元测试通过了并不意味着程序就没有bug了,但是不通过程序肯定有bug。

转载于:https://my.oschina.net/u/257801/blog/522170

python学习——基础(八)相关推荐

  1. C++学习基础八——重载输入和输出操作符

    C++学习基础八--重载输入和输出操作符 一.重载输入操作符的要点: 1.返回值为istream &. 2.第一个参数为istream &in. 3.第二个参数为自定义类型的引用对象( ...

  2. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...

  3. Python学习-基础介绍

    Python学习-基础介绍 Python基本语法介绍 变量 数据类型 列表 list 添加 删除 统计分析 切片器 set 集合 添加 判断是否存在 删除 数组 array 运算符 控制语句 if/e ...

  4. Python学习基础必备知识点:字典dict详解

    取键值 1.Python 字典 setdefault() 方法和 get() 方法类似,返回指定键的值,如果键不在字典中,将会添加键并将值设置为一个指定值,默认为None. get() 和 setde ...

  5. [转载] python学习-基础教程、深度学习

    参考链接: 在Python中使用NLTK对停用词进行语音标记 人工智能学习线路图 Python教程 Python 教程Python 简介Python 环境搭建Python 中文编码Python 基础语 ...

  6. Python 学习 --- 基础知识

    第一章 1.python于1989年底由范.罗萨姆始创.是一种面向对象的解释型语言. 第二章 python起步 1.输出语句print. print和%结合使用,实现字符串的替换,与C语言中的prti ...

  7. Python学习笔记(八)爬虫基础(正则和编解码)

    知识点 正则 正则匹配url,引用re库,将需要匹配的字段用(.*?)来匹配,可以匹配任何字符串.如果有换行,可以用如下方式解决: 1. ([\s\S]*?) 2. re.findall(reg,ht ...

  8. Python学习-基础篇7 网络编程

    #pytho 基础之socket编程 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架 ...

  9. Python学习基础方便查询

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

最新文章

  1. 王道考研 计算机网络笔记 第六章:应用层
  2. SQL2008-分页显示3种方法
  3. C++ operator关键字(重载操作符)
  4. django models索引_Django开发者常犯的7种错误
  5. labview如何加载库_迈德威视工业相机LabView 开发指导
  6. C和C++数据结构算法
  7. android拍照功能无预览,Android 无预览拍照
  8. vue3+typescript引入外部文件
  9. python FOR循环
  10. Java描述 数据结构与算法
  11. finereport前端组件类思维导图
  12. java单例模式_Java 实现单例模式的 9 种方法
  13. 论文笔记_S2D.45_DeepVO: 基于深度循环卷积神经网络的端到端视觉里程计
  14. python飞机大战游戏代码_python实现飞机大战小游戏
  15. 深入理解JVM虚拟机
  16. vue、vant上传附件功能实现
  17. 【C++刷LeetCode套路1】Array题型: 双指针Two Pointers套路
  18. 开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山
  19. 双语美文|治愈系英文段子,你对人生过敏吗
  20. 一千万人都在等小黄车OFO退押金

热门文章

  1. 机器学习算法(6)——随机森林
  2. edit with idle 没反应_搬个家,猫咪不吃不喝甚至猝死?可能是你没做好“前戏”...
  3. php 获得汉字拼音首字母的函数,php 获得汉字拼音首字母的函数
  4. MyBatis复习(五):获取多表关联查询结果
  5. linux bash环境变量,linux-bash环境变量
  6. html iframe 不限制大小_渗透技术再升级:如何利用HTML注入泄漏用户数据
  7. python对键和值有没有类型限制_第026课:词典:索引不易使用时2,讲,字典,当,不好...
  8. SpringDataRedis的简单案例使用
  9. Linux 免密登录和配置环境变量
  10. P2419 [USACO08JAN]牛大赛Cow Contest