异常处理

#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. redis php使用实例

    redis的操作很多的,以前看到一个比较全的博客,但是现在找不到了.查个东西搜半天,下面整理一下php处理redis的例子,个人觉得常用一些例子.下面的例子都是基于php-redis这个扩展的. 1, ...

  2. ldap常用命令

    单独查询用户信息 ldapsearch -D "cn=admin,dc=hrbeu,dc=edu,dc=cn" -b "ou=hbr,dc=hrbeu,dc=edu,dc ...

  3. oracle 中有数据但是sql查询不出来结果(中文)

    如 select * from user where name like '%王%': 无数据: 而数据库中确实有姓王的用户. 配置环境变量 NLS_LANG = AMERICAN_AMERICA.A ...

  4. 3、Lambda表达式

    Lambda表达式 Lambda表达式(lambda expression),是一种匿名函数,即没有函数名的函数. Lambda表达式不仅在C#中使用,在Java.Phtyon.C++ 中都有使用. ...

  5. static变量和函数如何巧妙调用

    app.c 和 main.c 之间,在main.c中调用app.c的static变量和函数,需要利用一个结构体结合指针通过传地址的方式间接访问. app   --------------------- ...

  6. zookeeper从小白到精通

    目录 1.介绍 1.1概念 1.2特点 1.3主要的集群步骤 1.4数据结构 1.5应用场景 2.本地安装 2.1安装jdk 2.2下载安装 2.3配置文件修改 2.4启动服务端 2.5启动客户端 2 ...

  7. mysql备份灵活恢复

    mysql备份灵活恢复 服务上线遇到一个问题,开始操作前做了全库备份,但是没有做要操作的库备份,如果操作过程出现失败情况需要回退时,直接用全备文件做全库恢复很不妥当. 通过mysql的全备份文件,可以 ...

  8. Mysql之InnoDB行格式、数据页结构

    Mysql架构图 存储引擎负责对表中的数据的进行读取和写入,常用的存储引擎有InnoDB.MyISAM.Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Mem ...

  9. Oracle入门基础(七)一一集合运算

    SQL> /* SQL> 查询10和20号部门的员工 SQL> 1. select * from emp where deptno=10 or deptno=20; SQL> ...

  10. String常用方法解析

    package com.javaBase.string; import java.util.Locale; /** * 〈一句话功能简述〉; * 〈String类中常用的方法整理〉 * * @auth ...