异常处理

#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. php 23种设计模型 - 状态模式

    状态模式 状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列 ...

  2. JDBC 使用详解

    1.JDBC 编程步骤: 加载驱动程序; Class.forName(driverClass) 加载Mysql驱动:Class.forName("com.mysql.jdbc.Driver& ...

  3. 『现学现忘』Docker基础 — 27、Docker镜像的commit操作

    目录 1.commit命令作用 2.commit命令说明 3.示例演示 1.commit命令作用 在运行的容器中,并在镜像的基础上做了一些修改,我们希望保存起来,封装成一个新的镜像,方便我们以后使用, ...

  4. 5月31日 python学习总结 Python中应该使用%还是format来格式化字符串?

    %还是format Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是format这根本 ...

  5. Nginx配置不当(CRLF注入 、目录穿越)

    基于vulhub漏洞环境 环境搭建参考:https://blog.csdn.net/qq_36374896/article/details/84102101 1.漏洞名称 CRLF注入 2.漏洞原理 ...

  6. luoguP5319 [BJOI2019]奥术神杖(分数规划,AC自动机DP)

    luoguP5319 [BJOI2019]奥术神杖(分数规划,AC自动机DP) Luogu 题解时间 难点在于式子转化,设有c个满足的子串,即求最大的 $ ans = \sqrt[c]{\prod_{ ...

  7. 【推理引擎】ONNXRuntime 的架构设计

    ONNXRuntime,深度学习领域的神经网络模型推理框架,从名字中可以看出它和 ONNX 的关系:以 ONNX 模型作为中间表达(IR)的运行时(Runtime). 本文许多内容翻译于官方文档:ht ...

  8. 漫长的旅途--C++primer学习-命名空间以及类的自动转换和强制转换

    C++用名称空间来控制名称的作用域: 1不同命名空间的同名变量可以同时存在,不会发生冲突 2命名空间不能出现在代码块中 3我们用作用域运算符::,使用空间名来限定名称,最常用的std::cout 4u ...

  9. Elman network with additional notes

    // Author: John McCullock // Date: 10-15-05 // Description: Elman Network Example 1. //http://www.mn ...

  10. Mysql查询优化器之关于子查询的优化

    下面这些sql都含有子查询: mysql> select * from t1 where a in (select a from t2); mysql> select * from (se ...