try,except,finally的用法
try,except,finally
try...except形式:指定一个或多个异常处理器(异常子句).。
当在try子句中没有异常发生时,,异常处理器将不被执行.
当在try子句中有异常发生时,首先会执行except搜索异常处理器,它会按顺序搜索直到第一个匹配的处理器找到为止.。
如果在except后面找到对应的异常声明,就会处理。
如果没有找到,异常就会被临时保存起来,然后去执行finally语句,但如果finally中产生了新的异常或者执行了return或者break语句,那么临时保存的异常将会被丢失,如果finally没有上面的情况,最后就会抛出保存的异常。
注意:一般我们会将一个没有指定异常的except语句, 它必须放在最后, 它会匹配任何异常并处理。
try...finally形:式指定一个清除处理器. 在执行try语句块没有异常发生时, finally子句被执行.在异常引发时, 该异常就被临时保存起来, finally也被执行, 然后暂存的异常被重新引发.
如果执行finally子句时引发了另一个异常或执行了return或break语句, 就会抛弃保存的异常,在finally子句中的continue语句是非法的(这么做的原因是当前实现的原因 ---- 这个限制可能也会保留下去)在执行finally子句时异常信息是无效的.
简单总结:
1.当执行try...except之间的语句序列没有发生异常时,则忽略异常处理部分(except)的语句。
2、Except括起来的语句,则只有在产生异常的情况下会被执行,其他情况一概不执行的。
3、Finally括起来的语句是铁定会被执行的,无论是否有异常产生;
面试题1
def func():
try:
return 123
finally:
return 321
print(func())#结果:321 def func():
try:
return 123
finally:
print(321)
print(func())#结果321 123
finally有一个特性,那就是无论如何,finally中的代码都将被执行,那么当执行到try中return的时候函数fun将被结束返回,这个时候由于finally的特性,try中的return 'try return' 经暂时被挂起,当执行完finally中的语句之后再返回执行,可finally中却执行了另一个return,导致了函数直接结束了,此时try中的finally就被丢失了。所有在我们的实际开发中我们应尽量避免在finally使用return语句返回。
面试题2
def fun():
try:
print('try--start')
a = 1/0
except ValueError as ret:
print(ret)
finally:
return 'finally' print(fun())
#结果
try--start
finally
如果在except中没有捕获异常,异常会被保存起来,当finally子句时引发了另一个异常或执行了return或break语句,就会抛弃保存的异常。
try,except,finally的用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
随机推荐
- 使用极路由进行外网映射,本地电脑做服务器,运行javaWeb项目
最近在学习javaWeb,一个项目需要android访问服务器,于是使用自己的笔记本电脑作为服务器,需要进行端口映射.使得外网可以访问自己的javaWeb项目或者网站之类的.普通路由请看:http:/ ...
- ES6深入浅出-1 新版变量声明:let 和 const-2.视频 let和const
以前的var方式声明不好用 a=1回声明一个全局变量, 输出了1 说明a=1确实声明了一个全局变量. 但是你把放在其他的地方,就不是声明全局变量了. 如果外面有个全局变量a 那么函数里面就是给a赋值 ...
- webpack 用 webpack-parallel-uglify-plugin 加速打包报错
从新拉了份代码.npm install .npm run dev 都没有问题,但是npm run build 就报上面的错误了 查了好多资料,都没有解决上面的问题,也不知道是哪里出了问题,但是可以肯定 ...
- CDH集群部署hive建表中文乱码
背景:部署CDH集群的 hive 服务,选用 mysql 作为 hive 元数据的存储数据库,通过 hive cli 建表时发现中文注释均乱码. 现象:hive端建表中文注释乱码. 定位: 已经确认过 ...
- Python——使用Notepad++运行
安装 安装python,安装完后找到python.exe,记录绝对路径,我的是:E:\log\python-3.7.4\python.exe 设置 用Notepad++打开python脚本,按F5会弹 ...
- tomcat-APR配置及三种工作模式简介
安装软件包,之前可以用rpm -q 命令查看一下是否存在,如果有这两个软件包先卸载再重新安装yum -y install apr apr-devel 拷贝Tomcat安装目录下的bin目录下的tomc ...
- 【Qt开发】QT4 升级到 QT5 改动
QT4 升级到 QT5 改动: PC部分: [改 QTDIR 变量] 在工程根目录下找到 .user 文件 , 如 InnoTabPlugin.vcxproj.user 修改指向你的 QT5 根目录 ...
- C#实现工作日和休息日(包括法定节假日)的计算
转自:http://www.cnblogs.com/yuan-chong/p/HolidayHelper.html 一.开发背景: 最近在公司开发的系统中,需要计算工作日,就是给出一个采购周期(n天) ...
- linux中alarm函数和pause函数详解实例
alarm(time);执行之后告诉内核,让内核在time秒时间之后向该进程发送一个定时信号,然后该进程捕获该信号并处理:pause()函数使该进程暂停让出CPU,但是该函数的暂停和前面的那个slee ...
- JAVA计算字符串UTF-8字节数
String str = "C++/C#/JAVA软件开发"; try { System.out.println(str.getBytes("UTF-8").l ...