异常处理

#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入门-异常处理的更多相关文章

  1. Python 入门 之 异常处理

    Python 入门 之 异常处理 1.异常处理 (1)程序中的错误分为两种 <1> 语法错误 (这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范 ...

  2. 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 ...

  3. python入门篇

    第一篇:python入门 第二篇:数据类型.字符编码.文件处理 第三篇:函数 第四篇:模块与包 第五篇:常用模块 第六篇:面向对象 第七篇:面向对象高级 第八篇:异常处理 第九篇:网络编程 第十篇:并 ...

  4. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...

  5. Python基础教程系列目录,最全的Python入门系列教程!

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...

  6. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  7. Python 入门之Python简介

    Python 入门之Python简介 1.Python简介: (1) Python的出生: ​ python的创始人为吉多·范罗苏姆(Guido van Rossum)(中文名字:龟叔).1989年的 ...

  8. Python 入门之 Python三大器 之 迭代器

    Python 入门之 Python三大器 之 迭代器 1.迭代器 (1)可迭代对象: <1> 只要具有__ iter __()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个 ...

  9. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...

随机推荐

  1. Navicat v15 破解

    特别注意: 1.断网,否则在安装过程中会失败 2.关闭防火墙及杀毒软件 3.选择对应版本:mysql版就选择mysql 4.如果出现 就卸载,删除注册表,重新安装,出现rsa public key n ...

  2. 压力测试工具——jmeter

    Jmeter:这是一个绿色的工具,但是它需要依赖与jdk 8的环境,所以在安装的时候需要安装jdk8. 下载地址: 链接:https://pan.baidu.com/s/1pGj1hAqJBBoSHf ...

  3. 自学java一路以来,心血心得整理分享

    ✿ 贴心提示:文章内容比较长,但都是干货,请大家耐心看完.时间不够充裕的小伙伴,建议收藏,一定要耐心看完,保证对你有后续学习java有所帮助. 一.推荐背景介绍 (一)我是怎么学的? ★ 非常普通的人 ...

  4. 10、mysql的调优

    mysql的调优 调优的最终目的:节省系统资源.提高响应速度下面从6个维度对mysql进行优化. 第一步:对服务器的参数进行调优 通过show profile命令分析,如果sql语句在执行过程中等待时 ...

  5. Redis(一):基本数据类型与底层存储结构

    最近在整理有关redis的相关知识,对于redis的基本数据类型以及其底层的存储结构简要的进行汇总和备注(主要为面试用) Redis对外提供的基本数据类型主要为五类,分别是 STRING:可以存储字符 ...

  6. Docker 学习之命令篇

      Docker 学习之命令篇 1. docker images //镜像列表 2. docker ps –a //所有运行过的容器 3. docker ps –l 最后运行的容器 4. docker ...

  7. app自动化toast信息获取

    移动端测试比较常遇到toast类型的提示信息,那么对于这类信息我们要怎么获取呢,让我细细道来: 首先,获取toast信息要注意以下几点: 必须是Uiautomator2框架,设备配置参数中设置 &qu ...

  8. python的内存回收机制

          变量相当于门牌号,当门牌没有了,即函数的引用都没有调用了,内存的数据就会被清除掉. python内有个定时器,定期的会刷新,如果发现内存中数据被引用了,就会被回收,这个就是内存的回收机制 ...

  9. 什么是 Spring Profiles?

    Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean.因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些 ...

  10. 你能保证 GC 执行吗?

    不能,虽然你可以调用 System.gc() 或者 Runtime.gc(),但是没有办法保证 GC 的执行.