__slots__限制實例的屬性,如只允許對Student實例添加name和age屬性
classStudent(object):
? ? ?__slots__ = ('name','age')# 用tuple定義允許綁定的屬性名稱
日志:
使用logging模塊,程序打印完錯誤信息后會繼續(xù)執(zhí)行,并正常退出;
logging的好處,它允許你指定記錄信息的級別,有debug,info,warning,error等幾個級別
import logging
def foo(s):
? ? return 10/ int(s)
def bar(s):
? ? return foo(s) *2
def main():
? ? try:
? ? ? ? bar('0')
? ? except Exception as e:
? ? ? ? logging.exception(e)
單元測試:
編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase繼承。
以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執(zhí)行。
對每一類測試都需要編寫一個test_xxx()方法。由于unittest.TestCase提供了很多內(nèi)置的條件判斷,我們只需要調(diào)用這些方法就可以斷言輸出是否是我們所期望的。最常用的斷言就是assertEqual(),self.assertEqual(abs(-1),1), 拋出指定類型的斷言:
with self.assertRaises(KeyError):
? ? value = d['empty']
with self.assertRaises(AttributeError):
? ? value = d.empty
setUp()和tearDown()方法
文檔測試
import doctest?
doctest.testmod()
IO編程
with open("", 'rw') as f:
? ? print(f.read())
? ? f.write('Hello')
? ? f.close()
StringIO和BytesIO是在內(nèi)存中操作str和bytes的方法,使得和讀寫文件具有一致的接口。
>>> from io import StringIO
>>> f = StringIO()
>>> f.write('hello')
操作文件和目錄
import os
os.path.split()?把一個路徑拆分為兩部分,后一部分總是最后級別的目錄或文件名
os.path.splitext()可以直接讓你得到文件擴展名
os.path.join('/Users/michael','testdir') 在某個路徑下創(chuàng)建一個新的文件夾
os.listdir('./') 列出dir