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 方法对模板变量赋值,无论 ...
随机推荐
- 003-log-jul,jdk自带日志服务
一.简介 java官方日志jul,位于java.util.logging包下. 1.1.POM依赖 无依赖 1.2.配置 JUL的默认配置文件是logging.properties ,在 $JAVA_ ...
- 一步一步搭建Nuget私服
大致流程:1. 通过VS创建一个Web空项目,然后通过Nuget引入Nuget.Server(目前最新版3.2.1).2. 直接将这个Web项目发布到IIS.3. 通过nuget.exe打包*.nup ...
- 在 Laravel 中使用 MongoDB
可参考:https://blog.csdn.net/weixin_38682852/article/details/80840678 环境准备 安装 MongoDB 安装 PHP-MongoDB 扩 ...
- Linux 基本权限管理
1.linux权限表示: -rw-r--r-- (一共10位): 第一位:表示文件类型: 常用的三种文件类型:- 表示一般文件,d 表示目录,l 表示软链接文件: 后九位:每三位为一组: rwx r- ...
- linux基本防护措施,权限分配和提高防护安全
设置用户失效 1.失效的用户将无法登录 使用chage命令将用户zhangsan的账户设为当前已失效(比如已经过去的某个时间): [root@proxy ~]# useradd zhangsan [r ...
- Docker部署WordPress网站
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站,WordPress 不仅仅是一个博客程序,也是一款CMS,很多非博客网站也是用Wo ...
- Had I not seen the Sun(如果我不曾见过太阳)
Had I not seen the Sun by Emily Dickinson Had I not seen the Sun I could have borne the shade But Li ...
- 【ARM-Linux开发】cmem模块/DVSDK2.0
1. CMEM--高速缓存一致性问题的解决多核设计中,共享的二级高速缓存之间数据可能不一致,不同CPU内核的私有高速缓存也可能存在数据不一致,称为高速缓存的一致性问题.解决一致性问题的方法从整体上分可 ...
- matlab.坑01
1.数据的行列 位置 1.1.c++中二维数组与二维mwarray数据格式之间的相互转换 - weixin_38723958的博客 - CSDN博客.html(https://blog.csdn.ne ...
- ie兼容promise
引入 <script src = "https://cdn.polyfill.io/v2/polyfill.min.js"></script> 或 < ...