python3(三十二) try except
""" 异常处理 """
__author__on__ = 'shaozhiqi 2019/9/19' # 大量的代码来判断是否出错:
# def foo():
# r = some_function()
# if r == (-):
# return (-)
# # do something
# return r
#
#
# def bar():
# r = foo()
# if r == (-):
# print('Error')
# else:
# pass
# 用异常机制来处理
try:
print('try...')
r = /
print('result:', r)
except ZeroDivisionError as e:
print('except:', e) # 执行结果: except: division by zero
finally:
print('finally...')
print('END')
# 我们认为某些代码可能会出错时,就可以用try来运行这段代码,
# 如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,
# 即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。 # -----------------------------------------------------------------------------
# 如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句:
try:
print('try...')
r = / int('')
print('result:', r)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
else:
print('no error!')
finally:
print('finally...')
print('END') # 执行结果:
# try...
# result: 5.0
# no error!
# finally...
# END
# 异常列表:https://docs.python.org/3/library/exceptions.html#exception-hierarchy # ----------------------------------------------------------------
# 只要在最上层捕获了,就可以处理
def foo(s):
return / int(s) def bar(s):
return foo(s) * def main():
try:
bar('')
except Exception as e:
print('Error:', e)
finally:
print('finally...') main()
# 执行结果:
# Error: division by zero
# finally...
# 不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了 # -------------------------------------------------------------------------
# 如果不捕获错误,自然可以让Python解释器来打印出错误堆栈,但程序也被结束了。
# 既然我们能捕获错误,就可以把错误堆栈打印出来,然后分析错误原因,同时,让程序继续执行下去。
import logging def foo(s):
return / int(s) def bar(s):
return foo(s) * def main():
try:
bar('')
except Exception as e:
logging.exception(e) main()
print('END') # ---------------------------------------------------------------------
# 自定义异常,并抛出自定义异常,不捕获的话程序中断
class FooError(ValueError):
pass def foo(s):
n = int(s)
if n == :
raise FooError('invalid value: %s' % s)
return / n # foo('') # __main__.FooError: invalid value: # 抛出系统异常
def foo(s):
n = int(s)
if n == :
raise ValueError('invalid value: %s' % s)
return / n def bar():
try:
foo('')
except ValueError as e:
print('ValueError!')
raise bar() # ValueError: invalid value:
# 捕获错误目的只是记录一下,便于后续追踪。
# 由于当前函数不知道应该怎么处理该错误,所以,最恰当的方式是继续往上抛,让顶层调用者去处理。
# raise语句如果不带参数,就会把当前错误原样抛出。此外,在except中raise一个Error,还可以把一种类型的错误转化成另一种类型:
try:
/
except ZeroDivisionError:
raise ValueError('input error!')
# 切勿在业务中如上处理,这样就不知道到底是啥异常了
python3(三十二) try except的更多相关文章
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- COJ968 WZJ的数据结构(负三十二)
WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...
- NeHe OpenGL教程 第三十二课:拾取游戏
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
- Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)
开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...
- “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- ASP 三十二条精华代码 (1)
ASP 三十二条精华代码 (1) 2009-08-10 09:53:03 www.hackbase.com 来源:互联网 1. oncontextmenu="window.event.r ...
随机推荐
- Java多线程并发05——那么多的锁你都了解了吗
在多线程或高并发情境中,经常会为了保证数据一致性,而引入锁机制,本文将为各位带来有关锁的基本概念讲解.关注我的公众号「Java面典」了解更多 Java 相关知识点. 根据锁的各种特性,可将锁分为以下几 ...
- MySQL设置外键报错 #1452 - Cannot add or update a child row: a foreign key constraint fails 解决方法
MySQL数据库,当我尝试在A表中设置B表的主键为外键时,报出错误:#1452 - Cannot add or update a child row: a foreign key constraint ...
- Java序列化和反序列化-(新手)
实例: lx1: import java.io.*; public class xuliehua { public static void main(String[] args) throws Exc ...
- 微信小程序开发中的http请求总结
在微信小程序进行网络通信,只能和指定的域名进行通信,微信小程序包括四种类型的网络请求. 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...
- Flutter 实现不同样式(有样式) 的TextField (可自定义),类似微博#话题#、@用户,(给TextField加TextSpan)
描述 先上效果图 在项目中,有 @ 和 话题功能,需要在编辑时即可回显,但是官方原生的TextField不支持对部分文字定义不同的样式,所以封装了一个. 注意:这不是富文本插件,不支持在输入框中显示图 ...
- 用Python编写水仙花数
#找出水仙花数 def sxh(start, end): if end >= start and start >=100 and end<= 999: num=start #将num ...
- Cobait Strike的socks与ew代理使用
cobait strike介绍 Cobalt Strike 一款以 metasploit 为基础的 GUI 的框架式渗透测试工具,集成了端口转发.服务扫描,自动化溢出,多模式端口监听,win exe ...
- 被问到到http的时候你就这么回答!
大家好,我是标题党,啊不,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 分享不易,希望能够得到大家的支持和关注. 什么是互 ...
- 深入浅出C#结构体
目录 1.应用背景 2.结构体解析 2.1.结构体存在栈中 2.2.结构体不需要手动释放 3.封装心跳包结构体 4.结构体静态帮助类 5.New出来的结构体是存在堆中还是栈中? 5.1.不带形参的结构 ...
- python txt文件批处理
首先,切换文件路径到所在文件夹 然后,将txt文件内容按行读取,写入到all.txt def txtcombine(): files=glob.glob('*.txt') all = codecs.o ...