python学习——基础(八)

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

try:
    print ‘try‘
    r = 10 / 0
    print ‘result:‘, r

except ZeroDivisionError, e:
    print ‘except:‘, e

finally:
    print ‘finally‘

结果:
try
except: integer division or modulo by zero
finally

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

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

try:
    print ‘try‘
    r = 10 / 1
    print ‘result:‘, r

except ZeroDivisionError, e:
    print ‘except:‘, e

else:
    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 / 0
    print ‘result:‘, r

except ZeroDivisionError, e:
    print ‘except:‘, e
    raise 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:‘, e
        raise 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 test
    assert 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。

时间: 2024-11-05 21:35:49

python学习——基础(八)的相关文章

Python学习基础篇第一篇——快速入门(适合初学者)

一.Python学习基础篇第一篇--(快速入门) 建议从Python2.7开始学习,Python2.7可以支持扩展大量的第三方类库,是目前比较成熟的版本 编写代码的软件推荐将python自带的IDLE和PyCharm集成IDE结合起来使用 1.1 Python命令行 Python命令行将以 >>> 开始,比如 >>>print 'Hello World!' 对于验证简单的命令可以在python自带的IDLE中完成  1.2 在Python自带的IDLE写一段小程序 在所

python学习笔记八——正则表达式

1.元字符 []-常用来指定一个字符集:[abc];[a-z] -元字符在字符集中不起作用:[akm$] -补集匹配不在区间范围内的字符:[^5] ^-匹配行首 $-匹配行尾 \-后可加不同字符以表示不同意义,也可用于取消所有元字符 \d 匹配任何十进制数,相当于[0-9] \D 匹配任何非数字字符,相当于[^0-9] \s 匹配任何空白字符,相当于[\t\n\r\f\v] \S 匹配任何非空白字符 \w 匹配任何字母数字字符 \W 匹配任何非字母数字字符 *-匹配前一个字符零次或多次 +-至少

《转》python学习--基础上

学习的python本来想自己总结,但是发现了一篇不错的大牛的博客,拿来主义,,又被我实践了 关于前两篇如果总结的不详细,因此把他人的转载过来 http://www.cnblogs.com/BeginMan/archive/2013/04/12/3016323.html 一.欲练此功,必先自宫 从现在起,就开始真正地接触她了,或许很多人像我一样,不知道如何去快速掌握一门新的编程语言,今天贴出来一些建议,方便大家看看,这也是学习之前的十分重要的事情.虽然"欲练此功,必先自宫"太夸张,但是在

Python学习-基础篇1

一.变量: 1)变量定义规范: #1. 变量名只能是 字母.数字或下划线的任意组合#2. 变量名的第一个字符不能是数字#3. 关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda',

Python学习笔记八 面向对象高级编程(一)

参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 一.使用__slots__ 正常情况下,当定义了一个类之后,我们可以给这个类的实例绑定任何属性,这就是动态语言的优势: class Student(object): def __init__(self,name,age): self.name=name self.age=age bob=Student('Bob

python学习基础篇(一)

一:机器码和字节码 机器码计算机能够直接识别,字节码计算机不能直接识别. 高级语言:例如Python java c# php c++(字节码) 低级语言:c,汇编(机器语言) 二:语言之间的对比 java的执行效率比Python的执行效率高,但比Python的开发效率低. PHP类:适合于写网页 Python,java:可以写网页,也可以写后台 三:Python基础 python种类:jpython javascriptpython  pypy(cpython开发的Python) python的

python学习-基础和运算符

接下来是第二天的学习,关于基础和运算符部分,先放思维导图: while循环 (1)while循环,写完条件判断后加冒号":",再另起一行空4个空格写循环具体逻辑 while True: print('人生苦短,我也有python') 执行结果,将循环打印: 此外python中while有pass的写法,直接跳过本次循环,直接java中好像是没有. # 添加pass的写法,执行到pass,直接过,java中好像没有pass的写法 count = 0 while count < 10

python 学习第八课 -- 异常 反射 socket

面向对象 相关 一.isinstance(obj,cls)  查看obj是否为cls的对象 issubclass(sub,super) 查看类sub是否为super的派生类 二. 异常处理 1.   异常基础 try: pass except Exception,e: print e e为Exception的对象,print e 就是print Exception中的__str__ 2.   异常种类 常用异常 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo

python学习-基础-day1

17年4月中旬在51cto上报名了老男孩PYTHON高级自动化开发的课程,此随笔为记录学习中的有意义的东西(自我感觉有意义) 一.pycharm的基本配置与使用 之前自学过一段时间,一直用的自带的IDLE和notepad++,现在开始用pycharm,但是很不熟悉,随着使用不断补充和修改 开始可以设置字体.样板等,网上都很容易搜到 1.setting--editor--file and code template ,找到Python script,可以为新建的Python文件定义模板,只有再次新