您的位置:首页 > 编程语言 > Python开发

Python基础——异常处理与代码测试

2018-03-28 00:58 260 查看

Python基础——异常处理与代码测试

1. python IO

1.1 文件的打开与读取

在文件的处理例如文件的读写,很容易产生各种异常。在学习如何处理异常前,我们先来熟悉python对于文件IO的处理。

with open('file_name.file') as m_file:
text = m_file.read()
print(text)


这里我们打开了文件
file_name.file
,并读取了文件的所有内容,保存在变量
text
中。而后我们只需要像利用处理字符串的方式处理文件内容即可。

1.2 逐行读取文件内容

如果我们并不希望一下子就读取所有的文件内容,而是逐行读取,那么我们使用下述代码:

with open('file_name.file') as m_file:
for line in m_file:
print(line)


或者我们可以用列表来存储文件的各行:

with open('file_name.file') as m_file:
lines = m_file.readlines()


这样,
lines
中的每个元素为文件中的一行。

1.3 写入文件

在打开一个文件时,我们可以制定打开的方式,例如只读,写入,附加等。在只读模式下,我们无法对文件内容进行修改;写入模式下,我们将重写文件的内容;而附加模式下,我们将新的内容添加到文件的末尾。

with open('file_name.file', 'w') as w_file:
w_file.write('Hello World!')

with open('new_file_name.file', 'a') as a_file:
a_file.write('Hello World!')


我们可以看到上述代码在
open
函数中多加了一个参数,这个参数表示文件的打开模式:

‘r’——只读模式

‘w’——写入模式

‘a’——附加模式

所以对于
w_file
的操作,我们将清除文件中原有的内容,写入新的内容。而对于`a_file·的操作,我们将在文件的末尾添加新的内容。

2. 异常处理

异常指的是在程序运行过程中产生的错误,优秀的异常处理代码可以捕获程序运行中可能出现的异常,保证程序运行的过程中不会因为异常中断,使得程序具有很好的健壮性。

异常的处理使用
try-except
代码块完成,在
try
代码块中运行可能出现异常的代码,在`except·代码块中处理异常。

2.1 异常的处理

异常的处理使用
try-except-else
代码块完成。我们就
ZeroDivisionError
为例来展示异常处理的过程。

x = input('numerator:')
y = input('denominator:')

try:
result = x/y
except ZeroDivisionError:
print("Error! Divided by 0!")
else:
print(result)


我们将可能出现异常的代码放在
try
代码块中,然后使用
except
语句捕获并处理异常,若没有发生异常,则执行
else
代码块中的内容。

2.2 常见的异常

除了上述的
ZeroDivisionError
异常外,常见的异常还包括
FileNotFoundError
异常,这个异常在尝试读取文件但是文件不存在时发生,

3. 代码测试

有时候我们需要对代码进行测试,这里我们需要导入
unittest
模块中的代码测试工具。其中,单元测试可用于测试函数的某个方面是否符合要求,而全覆盖式测试将全面测试函数的各种使用方式。

为了测试一个函数,我们需要导入
unittest
模块,并且继承
unittest.TestCase
类:

import unittest

class FuncTestCase(unittest.TestCase):
"""测试函数func"""

def test_func(self):
"""判断是否有正确的返回"""
result = func(input)
self.assertEqual(result, correct_result)

unittest.main()


unittest
提供了一个很好的用于测试函数的框架,我们运行
unittest.main
时,
FuncTestCase
中所有
test_
打头的函数都将被运行,并且通过断言方法
assertEqual
返回是否通过测试。常用的断言方法不光有
assertEqual
,其他的断言方法如下:

asserEqual(a, b)

assertNotEqual(a, b)

assertTrue(a)

assertFalse(a)

assertIn(a, list)

assertNotIn(a, list)

除了静态方法外,我们还可以对类方法进行测试。为了避免在每一个测试单元都初始化类,可以在
unittest.TestCase
类的子类中,继承
setUp()
函数,将要测试的类的初始化语句放在其中,则可以在每一个测试单元直接调用这个类的实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: