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快速流畅地写有用的 ...
随机推荐
- 获取bing首页的每日一图
从必应(bing)首页抓取他的每日一图 以前上学时,曾经用python写过一个每天抓取bing每日一图的小工具. 现在想用java来重构一下. 抓取图片的思路 首先获取网页源码 从网页源码中,我们可以 ...
- Buffer 和 cache
要问Cache和Buffer的区别,首先要问另一个问题:为何会存在Cache和Buffer? 无论缓存还是缓冲,其实本质上解决的都是读写速度不匹配的问题,从这个角度,他们非常相似. 知乎上关于Cach ...
- 4月4日 python学习总结 os pickle logging
1.序列化和反序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickl ...
- fastcgi未授权访问及任意命令执行
1. 漏洞原理 服务端使用fastcgi协议并对外网开放9000端口,攻击者可以构造fastcgi协议包内容,实现未授权访问服务端.php文件以及执行任意命令. 2. 漏洞利用 第一步 搭建vulhu ...
- Shell:常见错误总结(一)
Blog:博客园 个人 译自BashPitfalls 本文总结了编写Shell脚本中的常见错误. for f in $(ls *.mp3) 最常犯的错之一就是编写这样的循环: for f in $(l ...
- MATLAB奔溃仅左上角显示关闭界面X
一 问题描述 今天在MATLAB调试图像增强程序时,忽然间点了MATLAB向下还原,奇怪的一幕发生了,电脑左上角仅显示关闭图标X.我就搜了MATLAB中文论坛(https://www.ilovema ...
- [NPUCTF2020]Baby Obfuscation wp
整体观察main函数,可以发现用户自定义函数和变量存在混淆,猜测为函数名及变量名asc混淆. 对函数进行分析: Fox1为欧几里得算法求最大公约数 Fox5其实是pow Fox4根据逻辑数学的法则实际 ...
- python3 爬虫2--发送请求1
1urlopen 属于url.request类 我们用urlopen("网址")来发送请求 最基础的发送请求如下 from urllib.request import urlope ...
- mysql join 底层原理
你知道 Sql 中 left join 的底层原理吗? 2019-09-10阅读 7130 https://cloud.tencent.com/developer/column/2367 01.前 ...
- SpringBoot和SpringCloud?
SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案,旨在快速搭建单个微服务而SpringCloud专注于解决各个微服务之间的协调与配置,服务之间 ...