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 ...
随机推荐
- Set-Get(?占位符)-Java(新手)
创建实体类: package JdbcDome; public class EmpL { private int uid; private String uNAME; private int age; ...
- setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop
笔者以前面试的时候经常遇到写一堆setTimeout,setImmediate来问哪个先执行.本文主要就是来讲这个问题的,但是不是简单的讲讲哪个先,哪个后.笼统的知道setImmediate比setT ...
- Redis基本数据类型、数据持久化、过期策略及淘汰机制
一点技术.技术乐享!!! 如果有人问你:Redis这么快,他的“多线程模式”你了解吗? 请回答他:您是想问Redis这么快,为什么还是单线程模式吗? redis是什么 简单来说redis是C语言开发的 ...
- 最全ElasticSearch6.5白金版本从构建ELK、集群搭建到和Mybatis结合操作详细讲解
1.安装ElasticSearch6.5.1 解压相关的ElasticSearch6.5.1的tar包到目录下,如果我们需要使用JDBC来连接的话是需要到白金版以上的,以下为将基础版破解为白金版的方法 ...
- Red Team 工具集之网络钓鱼和水坑攻击
来自:信安之路(微信号:xazlsec),作者:myh0st 参考项目:https://github.com/infosecn1nja/Red-Teaming-Toolkit 上图是一个 Red Te ...
- SSI服务器端包含注入
服务器端嵌入:Server Side Include,是一种类似于ASP的基于服务器的网页制作技术.大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server ...
- [最短路,floyd] Codeforces 1202B You Are Given a Decimal String...
题目:http://codeforces.com/contest/1202/problem/B B. You Are Given a Decimal String... time limit per ...
- Python:(使用matplotlib画图)次坐标轴,两个坐标轴
https://blog.csdn.net/Poul_henry/article/details/82533569
- B. The Monster and the Squirrel
B. The Monster and the Squirrel Ari the monster always wakes up very early with the first ray of the ...
- js对象中in和hasOwnProperty()区别
记录学习中容易混淆的一些方法. prop in object prop一个字符串类型或者 symbol 类型的属性名或者数组索引(非symbol类型将会强制转为字符串). objectName检查它( ...