除了在if...else...中使用,else块还可以在for循环、while循环以及try...except中使用。

在for循环中使用:

 my_list = ['a','b','c','d']
for my_item in my_list:
if my_item == 'e':
break
else:
raise ValueError('No e flavor found!')

输出为:

 Traceback (most recent call last):
File "c:/Users/heyufei/Desktop/test.py", line 21, in <module>
raise ValueError('No e flavor found!')
ValueError: No e flavor found!

在for循环中,else块只有当for循环正常结束时才调用。如果for循环被任意其他操作打断,导致循环没有正常结束时else块是不会运行的。

在while循环中使用:

 i = 0
while i < 4:
if i == 5:
print('被break时不执行else块')
break
i += 1
else:
print('while 循环被条件为假而退出时执行我')

输出为:

 while 循环被条件为假而退出时执行我

修改数值后,执行下面语句:

 i = 0
while i < 4:
if i == 3:
print('被break时不执行else块')
break
i += 1
else:
print('while 循环被条件为假而退出时执行我')

输出为:

 被break时不执行else块

在try...except中使用else块:

如果不使用else块的异常处理你可能会这样写:

 try:
dangerous_call() # 要异常处理的方法
after_call() # 异常处理之后的方法
except OSError:
log('OSError...')

使用else块可以让你清晰自己要获取异常的方法是哪一个。

 try:
dangerous_call()
except OSError:
log('OSError...')
else:
after_call()

现在很明确,try块是获取dangerous_call()可能出现的错误,而不是after_call()。而且只有try块不抛出异常时才会执行else块中的after_call()方法。

else块的用途的更多相关文章

  1. java面向对象值类属语句块

    在我们之前学习语句的时候,我们讲过一种比较特殊的语句块,那就是局部代码块.局部代码块的作用是什么呢,就是把临时使用的变量放在里面,之后执行完之后,局部代码块中定义的变量会直接被释放,这样就避免了那些我 ...

  2. Oracle UNDO块

    过程:开始一个事务--通过事务信息找到UNDO块头的所在的段名及数据文件号等--转储UNDO header--在事务表中对应槽位找到前镜像dba--转储数据块--找到对应记录得到bdba--转储数据块 ...

  3. Xcode10 代码块(Code Snippet)添加和删除

    https://blog.csdn.net/lg767201403/article/details/82761448 Code Snippets 使用 https://blog.csdn.net/lv ...

  4. CCNA第三章子网划分,变长子网掩码(VLSM)和TCP/IP排错考试要点学习笔记

    1. 子网划分的好处      缩减网络流量; 优化网络性能; 简化管理; 可以更为灵活地形成大覆盖范围的网络.    2. 如何创建子网的步骤 首先,确认所需要的网络ID数; 其次,确认每个子网中所 ...

  5. 『Python CoolBook』C扩展库_其六_从C语言中调用Python代码

    点击进入项目 一.C语言运行pyfun的PyObject对象 思路是在C语言中提供实参,传给python函数: 获取py函数对象(PyObject),函数参数(C类型) 获取GIL(PyGILStat ...

  6. 3D中的OBJ文件格式详解

    常见到的*.obj文件有两种:第一种是基于COFF(Common Object File Format)格式的OBJ文件(也称目标文件),这种格式用于编译应用程序:第二种是Alias|Wavefron ...

  7. 使用Groovy+Spock轻松写出更简洁的单测

    当无法避免做一件事时,那就让它变得更简单. 概述 单测是规范的软件开发流程中的必不可少的环节之一.再伟大的程序员也难以避免自己不犯错,不写出有BUG的程序.单测就是用来检测BUG的.Java阵营中,J ...

  8. 教你一招,提升你Python代码的可读性,小技巧

    Python的初学者,开发者都应该知道的代码可读性提高技巧,本篇主要介绍了如下内容: PEP 8是什么以及它存在的原因 为什么你应该编写符合PEP 8标准的代码 如何编写符合PEP 8的代码 为什么我 ...

  9. 懒汉式单例要加volatile吗

    private static volatile Something instance = null; public static Something getInstance() { if (insta ...

随机推荐

  1. Codeforces 919D Substring (拓扑排序+树形dp)

    题目:Substring 题意:给你一个有向图, 一共有n个节点 , m条变, 一条路上的价值为这个路上出现过的某个字符最多出现次数, 现求这个最大价值, 如果价值可以无限大就输出-1. 题解:当这个 ...

  2. 天梯杯 L2-010. 排座位

    L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...

  3. Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan(dfs+数学思想)

    题目链接:http://codeforces.com/contest/742/problem/C 题意:题目比较难理解,起码我是理解了好久,就是给你n个位置每个位置标着一个数表示这个位置下一步能到哪个 ...

  4. Hexo博客Next v7.X 主题升级,美化警示录

    本文转载于:Hexo博客Next v7.X 主题升级,美化警示录丨奥怪的小栈 前言 经历了好几天(懒癌晚期懒得数了)的与主题升级斗争后,我终于完成基本上完成了next主题的升级!升到了V7.3!哈哈哈 ...

  5. == != === equals() 区别

    java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boolean,他们之间的比较,应用双等号(==) ...

  6. Request请求的应用

    1.通过request获得请求行 获得客户端的请求方式:String getMethod() 获得请求的资源: String getRequestURI()   StringBuffer getReq ...

  7. Day002_LInux基础_常用命令_001

    1.创建用户useradd -m -g 加参数-m 会自动创建家目录 -g 指定group 加入什么群组 passwd 设置用户的密码 su 和su - 的区别 su - 切换用户switch use ...

  8. springboot使用security

    springboot使用security 1.结构图 2.pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  9. [1]尝试用Unity3d制作一个王者荣耀(持续更新)->AssetBundle管理器

    如果已经看过本章节:目录传送门:这是目录鸭~ 1.AssetBundleManager: 首先我们创建一个文件夹,叫AssetBundleManager,再创建Csharp(即C#)脚本,名为Asse ...

  10. Android四大组件初识之Service

    Service作为Android四大组件之一,可以与Activity建立双向连接(绑定模式),提供数据和功能.也能够接收Intent单方面请求(调用模式),进行数据处理和调度功能. Service与A ...