Python入门-异常处理
异常处理
#try----else---- 会一起执行
#finally无论如何,最后都会执行
def main():
try:
res = 10/2
print("开始执行计算:",res)
except ZeroDivisionError as z:
print("代码执行有误:",z)
# except TypeError as z:
# print("代码执行有误:",z)
else:
print("else被执行了====")
finally: #不管前面如何,finally一定会执行!
print("不管是否计算,程序已经执行完毕!") if __name__ == '__main__':
main()
如果try失败,else也不会执行,except会执行。
代码执行有误: division by zero
不管是否计算,程序已经执行完毕!
多个异常处理
def main():
print("=======开始计算========")
try:
num = int(input("请输入数字:"))
num2 = int(input("请输入数字:"))
res = num / num2
print("计算结果为:",res)
except ZeroDivisionError as z:
print("被除数不能为 0:", z)
except ValueError as v:
print("你输入的不是数字:", v)
finally:
print("=======执行完毕=======")
if __name__ == '__main__':
main()
"""
=======开始计算========
请输入数字:32
请输入数字:23
计算结果为: 1.391304347826087
=======执行完毕=======
"""
异常统一处理
#异常之间是,继承的关系,所有的异常,父类异常是:Exception
#当不知道会出现何种异常的时候,可以使用traceback
import traceback
def main():
print("=======开始计算========")
try:
num = int(input("请输入数字:"))
num2 = int(input("请输入数字:"))
res = num / num2
print("计算结果为:",res)
except Exception as z:
print("Exception正在处理:", z)
"""
except Exception as z:
print("Exception正在处理:", traceback.format_exc())
"""
finally:
print("=======执行完毕=======")
if __name__ == '__main__':
main()
Exception正在处理: invalid literal for int() with base 10: 'dd'
Exception正在处理: division by zero
File "E:/code/hunjia_16/day07_0820/yichang/traceback_yichang.py", line 6, in main
num = int(input("请输入数字:"))
ValueError: invalid literal for int() with base 10: 'ddf'
抛出异常raise
def main():
print("=======开始====================")
try:
raise NameError("【raise-Name异常】应该是输入的名字有误。")
except Exception as e:
print("这是Exception输出:", e)
print("=====下面是traceback异常演示=====")
print(traceback.format_exc())
main()
"""
=======开始====================
这是Exception输出: 【raise-Name异常】应该是输入的名字有误。
=====下面是traceback异常演示=====
Traceback (most recent call last):
File "E:/code/hunjia_16/day07_0820/yichang/raise_yichang.py", line 16, in main
raise NameError("【raise-Name异常】应该是输入的名字有误。")
NameError: 【raise-Name异常】应该是输入的名字有误。
"""
# 继承中的,子类继承父类的方法,父类抛出异常
class Message:
def build(self): #如果使用父类的build方法,会报错
raise NotImplementedError("【Message类】build方法,正在使用。")
class Me(Message):
def build(self):
print("【Me子类】build方法,已经覆写。") if __name__ == '__main__':
m1 = Message()
m1.build()
"""
File "E:/code/hunjia_16/day07_0820/yichang/raise_lei_jicheng.py", line 3, in build
raise NotImplementedError("【Message类】build方法,正在使用。")
NotImplementedError: 【Message类】build方法,正在使用。
"""
def fun():
try:
raise NameError("【NameError】名称可能异常。")
except Exception as e:
print("【Exception】你的代码出bug啦。")
raise TypeError("TypeError:可能是类型错误。") from e
# raise TypeError("TypeError:可能是类型错误。") from None
# from None就找不到源头
if __name__ == '__main__':
try:
fun()
except Exception as e:
#抛出异常原因
print("Exception-main{}:运行程序,出现异常原因为:{}".format(e, e.__cause__)) """
【Exception】你的代码出bug啦。
Exception-mainTypeError:可能是类型错误。:运行程序,出现异常原因为:【NameError】名称可能异常。
#from None的执行结果如下
Exception-mainTypeError:可能是类型错误。:运行程序,出现异常原因为:None
"""
with处理异常
class Message:
class Connect:
def build(self):
print("开始连线好友。。。")
return True
def close(self):
print("已经断开消息链接。") def send(self, info):
try:
conn = Message.Connect()
if conn.build():
print("正在发送消息:", info)
else:
print("出问题了。")
except Exception as e:
print("消息延迟:", e)
finally:
conn.close()
print("=====通话完成====") if __name__ == '__main__':
m = Message()
m.send("百度一下")
m.send("www.baidu.com") """
开始连线好友。。。
正在发送消息: 百度一下
已经断开消息链接。
=====通话完成====
开始连线好友。。。
正在发送消息: www.baidu.com
已经断开消息链接。
=====通话完成====
"""
# 使用with语句,管理上下文,进行上下文开启,上下文退出操作
class Message:
class Connect:
def build(self):
print("开始连线好友。。。")
return True
def close(self):
print("已经断开消息链接。")
def __enter__(self):
print("=====with语句开始执行=====")
self.conn = Message.Connect()
if not self.conn.build():
print("建立通话失败。")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("=====with语句结束了=======")
self.conn.close()
def send(self, info):
print("正在发送消息:", info) if __name__ == '__main__':
with Message() as me:
me.send("谷歌")
me.send("www.google.com")
"""
=====with语句开始执行=====
开始连线好友。。。
正在发送消息: 谷歌
正在发送消息: www.google.com
=====with语句结束了=======
已经断开消息链接。
"""
with节省了性能,减少了打开关闭的操作。
自定义异常
#异常类不够使用,所以需要自定义异常
class BugException(Exception):
def __init__(self, info):
self.info = info
def __str__(self):
return self.info class Fun:
@staticmethod
def f(num):
if num > 999:
raise BugException("哎,不知道哪里出bug了。。")
else:
print("目前还没有问题,可以继续运行代码。")
if __name__ == '__main__':
try:
Fun.f(1111)
except BugException as b:
print("【BugException】异常处理:", b) """
【BugException】异常处理: 哎,不知道哪里出bug了。。
"""
Python入门-异常处理的更多相关文章
- Python 入门 之 异常处理
Python 入门 之 异常处理 1.异常处理 (1)程序中的错误分为两种 <1> 语法错误 (这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范 ...
- python 入门快速学习整理
Python 入门学习 1 : 对象类型 1 1.1 列表 1 1.2 字典 2 1.3 元组 2 1.4 元组 2 1.4 文件 3 2 : 条件和循环语句 3 2.1 if else语句 3 ...
- python入门篇
第一篇:python入门 第二篇:数据类型.字符编码.文件处理 第三篇:函数 第四篇:模块与包 第五篇:常用模块 第六篇:面向对象 第七篇:面向对象高级 第八篇:异常处理 第九篇:网络编程 第十篇:并 ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...
- Python基础教程系列目录,最全的Python入门系列教程!
Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...
- Python入门篇-文件操作
Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...
- Python 入门之Python简介
Python 入门之Python简介 1.Python简介: (1) Python的出生: python的创始人为吉多·范罗苏姆(Guido van Rossum)(中文名字:龟叔).1989年的 ...
- Python 入门之 Python三大器 之 迭代器
Python 入门之 Python三大器 之 迭代器 1.迭代器 (1)可迭代对象: <1> 只要具有__ iter __()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个 ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...
随机推荐
- 认识变量(python)
一.变量定义 1.1使用规范:先定义,后使用 1.2由三部分组成:变量名,赋值符号,变量值 1.3定义变量就是申请一个内存空间,python内部优化机制,对于数据量小的申请,就不重复开内存空间 二.变 ...
- NSView subview blocking drag/drop event
原文链接 近期在Mac项目中有一个处理鼠标拖拽事件的需求, 大致处理流程是这样的: 从 NSView 继承得到一个子类 覆盖处理拖拽事件相关方法 注册拖拽事件 开始的时候一切都很正常,直到某次发现拖拽 ...
- 怎么做好企业IT运维工作
维的工作层次来分,又分为硬件运维.桌面运维.系统运维.数据库运维和应用运维.他们运维的设备,小的从个人电脑,大的到数以亿计的高精尖计算设备(比如 大型机 ). 根据公司 IT 系统规模的不同,运维团队 ...
- [递归回溯] LeetCode 504七进制数(摸鱼版)
LeetCode 七进制数 前言: 这个就没什么好说的了 题目:略 步入正题 进位制转换 10 -n 余数加倒叙 没什么好讲的直接上七进制代码 偷个懒 10进位制转7 class Solution { ...
- VuePress 博客之 SEO 优化(三)标题、链接优化
前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...
- 使用SymPy
最近工作的原因,需要进行一些积分运算,通过一些搜索得知了SymPy,记录一下使用历程. 1. SymPy介绍 SymPy是关于Symbolic Mathematics的Python库,它旨在成为一个功 ...
- 旅游清单一步搭建,Angular助力你的踏春计划
春天的脚步愈发临近,相信很多小伙伴已经开始规划自己的踏春计划了,无论是欣赏名胜古迹,还是走访风土人文,你都需要提前准备一份旅游清单!有了这款Angular旅游计划应用,从地点到预算,它都能帮助你创建自 ...
- Oracle 11g中查询CPU占有率高的SQL
oracle版本:oracle11g 背景:今天在Linux中的oracle服务上,运用top命令发现许多进程的CPU占有率是100%. 操作步骤: 以进程PID:7851为例 执行以下语句: 方法一 ...
- 4月24日 python学习总结 多进程与子进程
一.进程 并发的本质: cpu切换进程+保存状态 一个程序执行了多次,就启动了多个进程 进程与进程之间的内存空间是隔离开的 二.在一个进程中开启子进程 新进程的创建都是由一个已经存在的进程执行了一个用 ...
- vulhub漏洞环境搭建
(搭建之前建议更换成阿里的源) 在纯净ubuntu中部署vulhub环境: 1.安装docker,并用docker -v命令验证安装结果: curl -s https://get.docker.com ...