Python3.7else与with语句

else语句
(1)while-else语句
list=[1,2,3,4]
while 0 in list:
	print('0在该列表中')
else:
	print('0不在该列表中')
结果:
	0不在该列表中
(2)for-else语句

在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

for num in range(10,20):  # 迭代 10 到 20 之间的数字
	for i in range(2,num): # 根据因子迭代
		if num%i == 0:      # 确定第一个因子
     		j=num/i          # 计算第二个因子
     		print '%d 等于 %d * %d' % (num,i,j)
     break            # 跳出当前循环
else:                  # 循环的 else 部分
	print num, '是一个质数'
(3)try-except-else语句

如果在 try 子句执行时没有发生异常,Python将执行 else 语句后的语句(如果有 else 的话),然后控制流通过整个 try 语句。

try:
	正常的操作
except:
	发生异常,执行这块代码
else:
	如果没有异常执行这块代码

使用 except 而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。

try:
	正常的操作
except(Exception1[, Exception2[,...ExceptionN]]]):
	发生以上多个异常中的一个,执行这块代码
else:
	如果没有异常执行这块代码
with语句

一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。
关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行它的清理方法。

with语法格式:

with context_expression [as target(s)]:
	with-body

Python 对一些内建对象进行改进,加入了对上下文管理器的支持,可以用于 with 语句中,比如可以自动关闭文件、线程锁的自动获取和释放等。假设要对一个文件进行操作,使用 with 语句可以有如下代码:

try:
	with open('myfile.txt', 'w') as f:
    	for line in f:
        	print(line)
except OSError as error:
	print('出错啦!%s' % str(error))
	
#出错啦!not readable

这里使用了 with 语句,不管在处理文件过程中是否发生异常,都能保证 with 语句执行完毕后已经关闭了打开的文件句柄。如果使用传统的 try/finally 范式,则要使用类似如下代码:

try:
	f = open('myfile.txt', 'w')
	for line in f:
    	print(line)
except OSError as error:
	print('出错啦!%s' % str(error))
finally:
	f.close()

#出错啦!not readable

比较起来,使用 with 语句可以减少编码量。