type()函数
type()函数既可以返回一个对象的类型,又可以创建出新的类型。
type('类名',(继承的父类),dict(方法绑定函数))
使用type()函数创建的类和直接写class完全一样,因为python解释器遇到class定义时,仅仅是扫描以下class定义的语法,然后调用type()函数创建出class。
metaclass()
当我们定义了类之后,可以根据这个类创建出实例,所以:
先定义metaclass,就可以创建类,最后创建实例。
错误处理
try
try...excepy...finally
流程为:try产生错误跳转到except,except执行结束后如果又finally则跳转到finally。
调试
assert
def foo(s):
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n
def main():
foo('0')
assert表示:如果n != 0 得结果为true,则程序继续进行
如果断言失败,assert语句本身就会抛出AssertionError错误,内容为表达式后的'n is zero!'
python解释器可以使用-O参数来关闭assert
logging
import logging
logging.basicConfig(level=logging.INFO)
logging不会抛出错误,且可以输出错误信息到文件。
logging记录的信息等级有:debug,info,warning,error等几个级别。
pdb
pdb适用于python解释器,可使程序一步一步运行。
(Pdb) n
> /Users/michael/Github/learn-python3/samples/debug/err.py(3)<module>()
-> n = int(s)
(Pdb) n
> /Users/michael/Github/learn-python3/samples/debug/err.py(4)<module>()
-> print(10 / n)
使用n可以单步执行代码,使用p 变量名查看变量
(Pdb) p s
'0'
(Pdb) p n
0
使用q结束调试
pdb.set_trace()
程序内使用pdb.set_trace()可以设置一个断点。
运行后,程序会在断点处暂停并进入pdb调试环境