我是靠谱客的博主 舒服荔枝,最近开发中收集的这篇文章主要介绍【python核心】异常处理异常,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 异常
    • 定义
    • 现象
    • 常见的异常类型
    • 处理
    • 练习
    • raise语句
    • 自定义异常类
    • 练习
    • 总结


异常

定义

运行时检测到的错误。

现象

当异常发生时,程序不会再向下执行,而转到函数的调用语句。

常见的异常类型

  1. 名称异常(NameError):变量未定义。
  2. 类型异常(TypeError):不同类型数据进行运算。
  3. 索引异常(IndexError):超出索引范围。
  4. 属性异常(AttributeError):对象没有对应名称的属性。
  5. 键异常(KeyError):没有对应名称的键。
  6. 为实现异常(NotlmplementedError):尚未实现的方法。
  7. 异常基类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核心】异常处理异常所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部