Python编程:从入门到实践
1 文件和异常 (第十章)
1.1 读取数据
1.1.1 读取整个文件
用with open('文件名') as 某某
来打开,不需要考虑关闭
若用open('文件名')
,则还需考虑何时close(‘文件名’)
逐行读取方法:for line in 某某: \n\t print(line)
1.1.2 创建一个包含所有行的列表
这是text文件:
3.1415926
535897
932384
以下是代码:
filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
以下是运行效果:
3.1415926
535897
932384
1.2 写入数据
略
1.3 异常
try-except-else
详略
2 测试代码 (第十一章)
2.1 测试函数
例:
待测试代码:
文件1:name_function.py
def get_formatted_name(first, last):
"""Generate a neatly formatted full name."""
full_name = first + ' ' + last
return full_name.title()
文件2:names.py
from name_function import get_formatted_name
print("Enter 'q' at any time to quit.")
while True:
first = input("\nPlease give me a first name: ")
if first == 'q':
break
last = input("Please give me a last name: ")
if last == 'q':
break
formatted_name = get_formatted_name(first, last)
print("\tNeatly formatted name: " + formatted_name + '.')
以下是测试代码:
import unittest # 导入了模块unittest
from name_function import get_formatted_name # 创建类,必须继承 unittest.TestCase 类
class NamesTestCase(unittest.TestCase):
"""测试name_function.py"""
def test_first_last_name(self): # 以 test_ 打头的方法都将自动运行
"""能够正确地处理像Janis Joplin这样的姓名吗?"""
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin') # 一个断言方法。断言方法用来核实得到的结果是否与期望的结果一致
unittest.main()
以下是运行效果(测试正确):
. # 句点表明有一个测试通过了
----------------------------------------------------------------------
Ran 1 test in 0.000s # Python运行了一个测试,消耗的时间不到0.001秒
OK # OK 表示所有测试都通过了
以下是另一个测试的运行效果(测试错误)(待测试代码及测试代码略):
E
======================================================================
ERROR: test_first_last_name (__main__.NamesTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_name_function.py", line 8, in test_first_last_name
formatted_name = get_formatted_name('janis', 'joplin')
TypeError: get_formatted_name() missing 1 required positional argument: 'last'
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
2.2 测试类
注:一些断言方法(只能在继承 unittest.TestCase
的类中使用这些方法,)
方法 | 用途 |
---|---|
assertEqual(a, b) | 核实 a == b |
assertNotEqual(a, b) | 核实 a != b |
assertTrue(x) | 核实 x 为 True |
assertFalse(x) | 核实 x 为 False |
assertIn(item, list) | 核实 item 在 list 里面 |
assertNotIn(item, list) | 核实 item 不在 list 里面 |
测试类与测试函数类似
方法setUp()
(没看懂)暂略