Python的with一句顶万句,try异常都给我滚蛋
从.5引入的一个旨在从流程图中把try和关键字从中去除的上下文管理协议状态下的新语法正是with。凡是和资源分配释放有关的代码通通都给去掉, 把try….….的处理流程进行简化。with通过方法初始化然后在中做善后以及处理异常。所以使用with处理的对象必须有()和()这两个方法。当中, 存在着这样一种情况, 有那么一种方法, 它会在语句体, 也就是那个被with语句包裹起来的代码块开始执行之前, 就先行进入运行状态, 而另一种方法呢, 则是在语句体执行完毕, 退出来之后, 才会开始运行。该语句适用于访问资源, 确保不论使用期间有无异常, 都将执行必要的清除运转, 释放那些资源状况, 像文件被实用后会自行关闭, 线程里锁亦能够自主获取并释放等。With语句的基本语法格式:withas参数说明是一个需要执行的表达式存有表达式执行返回结果的, 可选择参数, 是由变量作为形式呈现, 或者以元组作为形式呈现。例如先是打开d:\\xxx.txt, 接着将其当作文件指针赋予fp。... print fp.read()...我无法大是大非我无法大是大非我无法大是大非with语句的工作原理跟随着with之后的语句会被进行求值, 返回对象的括号内方法会被调用, 此方法的返回值会被赋值给as关键字后边的变量, 当with后面的代码片段全部都被执行结束之后, 将会调用前面返回对象的括号内里方法。含有语句最为关键之处在于, 被求值对象务必具备括号括起来的内容和括号括起来的另一内容这两个方法, 如此一来, 我们便能经由自身去达成这两个方法, 从而来自行定义含有语句处理异常。示例代码#utf-8class ():def (self,):self.open()print :%s%def (self):print : .%self.self.#可以返回不同的对象def (self,,,):print : Free . %self.if is None:print : .%self.self..close()else:print : with .%self.False这个, #它能够省略掉, 缺少的None, 同样是被当作是False。with (rd:\\xxx.txt) as fp:for line in fp.():print line结果其中, ()所返回的, 乃是其自身的引用, 而这一引用, 可被赋值于as子句里的fp变量。可按照实际所需, 将返回值的类型设定成不一样的类型, 不一定就得是上下文管理器对象自身。在方法里头, 针对变量展开检测, 若并不是 None, 此种情况意味发生了异常这时给出 False, 这表明得由外部代码逻辑去处理异常。假设并未出现异常时, 那缺省状态下的返回值会是None这家伙, 在布尔类型的环境当中它也是会被视作False这般情况的, 然而鉴于不存在异常状况发生, ()的那仨参数全都是None这个玩意儿, 用作上下文管理的代码能够监测出此种情形, 并进行正常状态下的处理工作。()方法所具备的3个参数, 依次分别代表着异常所对应的类型、异常的值、以及那堆栈方面的信息。

相关新闻