概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 异常
- 定义
- 现象
- 常见的异常类型
- 处理
- 练习
- raise语句
- 自定义异常类
- 练习
- 总结
异常
定义
运行时检测到的错误。
现象
当异常发生时,程序不会再向下执行,而转到函数的调用语句。
常见的异常类型
- 名称异常(NameError):变量未定义。
- 类型异常(TypeError):不同类型数据进行运算。
- 索引异常(IndexError):超出索引范围。
- 属性异常(AttributeError):对象没有对应名称的属性。
- 键异常(KeyError):没有对应名称的键。
- 为实现异常(NotlmplementedError):尚未实现的方法。
- 异常基类Exception。
处理
"""
异常处理
"""
def div_apple(apple_count):
#ValueError
person_count = int(input("请输入人数︰"))
#ZeroDivisionError:
result = apple_count / person_count
print("每人%d个苹果"%result)
#建议分门别类的处理
try:
#可能出错的代码
div_apple(10)
#不建议这么做
# except Exception:
except ValueError:
print("输入的人数必须是整数")
except ZeroDivisionError:
print("输入的人数不能为0")
except Exception:
print("未知错误")
else:
# 如果异常,不执行else语句。
print("没有出错")
finally:
# 无论是否异常,一定会执行的代码。
print("finally")
#作用:一般不能处理的错误,但是有一定要执行的代码,就定义到finally语句中。
## try except
## try except else
##try finally
print("后续逻辑....")
练习
定义函数﹐在控制台中获取成绩的函数。
要求∶如果异常,继续获取成绩,直到得到正确的成绩为止。成绩还必须在0–100之间。
def get_score():
while True:
str_score = input("请输入成绩:")
try:
score = float(str_score)
except:
print("输入的不是浮点数")
continue
if 0<=score<=100:
return score
else:
print("超出范围")
print(get_score())
raise语句
作用:抛出一个错误,让程序进入异常状态。
自定义异常类
作用:封装错误信息。
"""
自定义异常类
"""
class AgeError(Exception):
"""
年龄错误
"""
def __init__(self,message,age_value,code_line,error_number):
super().__init__("出错了")
self.message = message
self.age_value = age_value
self.code_line = code_line
self.error_number = error_number
class Wife:
def __init__(self,age) :
self.age = age
@property
def age(self):
return self.__age
@age.setter
def age(self, value):
if 21 <= value<= 31:
self.__age = value
else:
# raise ValueError("我不要")
raise AgeError("超过我想要的范围啦",value,26,1001)
try:
w01 = Wife(81)
except AgeError as e:
print("请重新输入")
print(e.age_value)
print(e.code_line)
练习
练习:敌人类(攻击力0–100 )
抛出异常的信息∶消息/错误行/攻击力/错误编号
class AttackError(Exception):
def __init__(self,message,error_line,attack_value,error_number):
super().__init__("出错啦")
self.message = message
self.error_line = error_line
self.attack_value = attack_value
self.error_number = error_number
class Enemy:
def __init__(self,attack):
self.attack = attack
@property
def attack(self):
return self.__attack
@attack.setter
def attack(self,value):
if 0<= value <=100:
self.__attack = value
else:
raise AttackError("攻击力出错啦",90,value,1001)
try:
enemy = Enemy(120)
except AttackError as a:
print(a.message)
大家可以根据异常知识去完善学生管理系统,详细见student_manager_system_exception。
总结
包
定义:包含_init _.py文件的文件夹
作用:团队分工,结构清晰。
导入:
import 包.模块 as 变量
from 包.模块 import 成员
from 包.模块 import x
原理:import sys
sys.path+from的路径可以正确的定位到文件,导包才成功。
异常处理
异常:运行时遇到的错误,后续代码不再执行,返回给调用者。
处理:将异常流程(向上翻)转为正常流程(向后走)
语法:try:
可能出错的语句
except 错误类型1:
处理逻辑
except 错误类型2:
处理逻辑
else:
不错的逻辑
finally:
无论对与错,一定执行的代码
raise:人为抛出异常
最后
以上就是舒服荔枝为你收集整理的【python核心】异常处理异常的全部内容,希望文章能够帮你解决【python核心】异常处理异常所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复