异常意味着出现错误,并且会终端程序的正常控制流。使用raise语句可以引发异常。如果raise语句没有带任何参数,将会再次引发最近一次生成的异常。使用try和except可以捕捉异常。
1.定义新异常
所有内置异常都是用类进行定义,要创建新异常,就定义父类为Exception的新类
class NetworkError(Exception):
pass
可用一下方式通过raise语句使用这个新异常
raise NetworkError("Cannot find host")
引发异常时,将提供给raise语句的可选值用作异常的类构造函数的参数。
2.上下文管理器与with语句
依法的异常可能会导致控制流跳过负责释放关键资源(如锁定)的语句
with语句支持在由上下文管理器对象控制的运行时上下文中执行一系列语句。with obj语句在控制流进入和离开其后的相关代码块时,允许对象obj管理所发生的事情。执行with obj语句时,它执行方法obj.enter()来指示正在进入一个新的上下文。当控制流离开该上下文时,就会执行方法obj.exit(type,value,traceback)。如果没有引发异常,exit()方法的3个参数被设为None。否则,他们将包含与导致控制流离开上下文呢的异常相关的类型、值和跟踪信息。
3.断言与debug
assert语句可以在程序中引入调试代码。assert的一般格式为
assert test [,msg]
其中test是一个表达式,其值应该为True或False。如果test求值为Fasle,assert就会引起AssertionError异常并使用在assert中提供的可选消息msg。
def write_data(file,data)
assert file,"write_data filenot defined"