zoukankan      html  css  js  c++  java
  • Python基础之模块+异常

    一、模块相关概念

      1、定义:包含一系列数据、函数、类的文件通常以.py结尾

      2、作用:让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰有利于多人合作开发

      3、模块导入方式(三种):

        1)、import导入法:

          

        2)、from  import导入法:

          

        3)、from  import *导入法:

          

      4、模块变量:

        

      5、模块分类:

        

      6、加载过程:

        

    二、包相关概念

      1、定义:将模块以文件夹的形式进行分组管理

      2、作用:让一些相关的模块组织在一起,使逻辑结构更加清晰

      3、导入方式(三种):

        

      4、包中的__init__.py文件作用:是包内必须存在的文件,会在包加载时被自动调用。

      5、__all__变量在导包中的作用:记录from import * 语句需要导入的模块

    三、异常处理相关概念:

      1、异常:

        1)、定义:运行检测到的错误。

        2)、 现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句

        3)、常见异常类型:

          

      2、处理:

        1)、语法:

          

        2)、raise语句:

          

        3)、自定义异常:

          

    四、基础语法代码:

      代码1:

      

    """
        模块属性
        # 练习: 将学生管理系统拆分为四个模块
        # XXXModel  ---> model 模型层
        # XXXView --->  ui  表示层
        # XXXController ---> bll   业务逻辑层
        # 调用代码  --->  main  程序入口
    """
    from module01 import *
    
    fun01()
    # fun04()
    
    # 获取模块文档注释
    import module01
    print(module01.__doc__)
    
    # 获取模块文件路径
    print(module01.__file__)
    
    # 获取模块名称
    print(module01.__name__) #模块名  __main_

      代码2:

      

    """
        标准库模块 -- 时间
    """
    import time
    
    # 返回时间戳(1970年后经过的浮点秒数)
    # 1555579061.7284493
    print(time.time())
    
    # 时间戳 --> 时间元组(年  月   日   时  分   秒   星期    一年的第几天   夏令时)
    print(time.localtime(1555579061.7284493))
    
    # 时间元组  --> 时间戳
    print(time.mktime(time.localtime()))
    
    # 时间元组 -->  字符串 (时间的格式化)
    # time.localtime()  -->  str
    print(time.strftime("%Y %m %d  %H:%M:%S", time.localtime()))
    print(time.strftime("%y %m %d  %H:%M:%S", time.localtime()))
    
    # 字符串 -->  时间元组
    print(time.strptime("2019 04 14", "%Y %m %d"))

      代码3:

      

    import time
    
    
    # 练习1:定义函数, 输入年月日,返回星期.
    #  星期一  星期二  星期三  ......
    def get_week(year, month, day):
        time_tuple = time.strptime("%d/%d/%d" % (year, month, day), "%Y/%m/%d")
        weeks = {
            0: "星期一",
            1: "星期二",
            2: "星期三",
            3: "星期四",
            4: "星期五",
            5: "星期六",
            6: "星期日",
        }
        # time_tuple[6] 从时间元组中获取星期数
        return weeks[time_tuple[6]]
    
    
    print(get_week(2019, 4, 18))
    
    
    # 练习2:定义函数:根据生日(年月日),返回活了多少天.
    # -- 根据年月日构建时间元组
    # -- 根据构建的时间元组获取时间戳
    # -- 使用当前时间戳 - 生日的时间戳
    # -- 将活的秒数换算为天
    def life_days(year, month, day):
        time_tuple = time.strptime("%d/%d/%d" % (year, month, day), "%Y/%m/%d")
        # time.mktime( time_tuple)
        life_seconds = time.time() - time.mktime(time_tuple)
        return life_seconds / 60 / 60 // 24
    
    
    print(life_days(1984, 6, 11))

      代码3:

        

    """
        包(文件夹)
        # 练习1: 目标 -- 在实际项目结构中,随心所欲的调用不同模块成员.
        # 1. 根据目录结构,创建相应的包与模块.
        # 2. 在相应模块中,定义函数/类.
        # 3. 在main中,调用skill_manager模块中成员
        # 4. 在skill_manager模块中调用skill_deployer模块成员
        # 5. 在skill_data模块中,调用list_helper模块成员.
    
    
    """
    
    
    # python程序结构
    #
    #     模块
    #
    #             函数()/方法()
    #                 语句
    
    
    # # 方式1:import 包.模块
    # import package01.module01
    # # 使用:包.模块.成员
    # package01.module01.fun01()
    
    
    # # 方式2:from 包 import 模块
    # from package01 import module01
    # # 使用:模块.成员
    # module01.fun01()
    
    # # 方式3:
    # from package01 import *
    # # 在包的__init__文件中,定义__all__ 属性
    # module01.fun01()
    
    
    # [推荐]
    # from 包.模块 import 成员
    from package01.module01 import *
    fun01()

      代码4:

        

    """
        异常处理
        
    """
    
    
    def div_apple(apple_count):
        # 分苹果
        person_count = int(input("请输入人数:"))  # ValueError
        result = apple_count / person_count  # ZeroDivisionError
        print("每个人分类%d个苹果" % result)
    
    
    # 缺点:不能根据具体错误,做出相应处理逻辑.
    # try:
    #     div_apple(10)
    # except Exception as e: # 捕获所有类型的异常
    #     print("分苹果失败啦")
    
    
    # try:
    #     div_apple(10)
    # except ValueError: # 捕获ValueError类型的异常
    #     print("输入的人数有误")
    # except ZeroDivisionError: # 捕获ZeroDivisionError类型的异常
    #     print("人数不能是零")
    # except Exception as e: # 捕获所有类型的异常
    #     print("未知类型的错误")
    
    
    try:
        div_apple(10)
    except ValueError as e:  # 捕获ValueError类型的异常
        print("输入的人数有误")
    except ZeroDivisionError:  # 捕获ZeroDivisionError类型的异常
        print("人数不能是零")
    except Exception as e:  # 捕获所有类型的异常
        print("未知类型的错误")
    else:  # 没有发生异常,执行的逻辑
        print("分苹果成功喽")
    finally:
        print("无论是否发生异常,都执行的逻辑")
    print("后续逻辑.......")

        代码5:

      

    """
        自定义异常
        练习:成绩异常(1-100)
    """
    
    class AgeError(Exception):
        """
            封装错误信息
        """
        def __init__(self,msg,code,age_value):
            super().__init__(msg)
            self.msg = msg
            self.code = code
            self.age_value = age_value
    
    
    
    class Wife:
        def __init__(self,age):
            self.age = age
    
        @property
        def age(self):
            return self.__age
    
        @age.setter
        def age(self,value):
            if 20 <= value <= 30:
                self.__age = value
            else:
               # print("我不要")
               # raise ValueError("我不要") # 人为抛出异常
                raise AgeError("我不要",27,value)
    
    try:
        w01 = Wife(80)
        print(w01.age)
    except AgeError as e:
        print("错误信息:",e.msg)
        print("错误代码行号:",e.code)
        print("输入的年龄是:",e.age_value)

      代码6:

      

    def get_score():
        while True:
            try:
                number = int(input("请输入成绩:"))
            # except ValueError:
            except:
                print("输入有误")
                continue # 跳过本次循环
    
            if 1<= number <= 100:
                return number
    
            print("成绩不在范围内")
    get_score()

      代码7:

      

    """
        学生管理系统 ui 界面----输入数据的异常处理
        表示层
    """
    
    from bll import *
    from model import *
    
    class StudentManagerView:
        """
            界面视图类
        """
    
        def __init__(self):
            # 创建逻辑控制器对象
            self.__manager = StudentManagerController()
    
        def __input_int(self, msg):
            while True:
                try:
                    return int(input(msg))
                except:
                    print("输入有误")
    
        def __input_students(self):
            # 1. 在控制台中录入学生信息,存成学生对象StudentModel.
            stu = StudentModel()
            stu.name = input("请输入姓名:")
            # while True:
            #     try:
            #         stu.age = int(input("请输入年龄:"))
            #         break
            #     except:
            #         print("输入有误")
            #
            # while True:
            #     try:
            #         stu.score = int(input("请输入成绩:"))
            #         break
            #     except:
            #         print("输入有误")
            stu.age = self.__input_int("请输入年龄:")
            stu.score = self.__input_int("请输入成绩:")
    
            # 2. 调用逻辑控制器的add_student方法
            self.__manager.add_student(stu)
            print(self.__manager)
    
        def __output_students(self, list_target):
            """
                显示学生列表信息
            :return:
            """
            # for stu in self.__manager.list_stu:
            for stu in list_target:
                # print(stu)
                print("%d -- %s -- %d -- %d" % (stu.id, stu.name, stu.age, stu.score))
    
        def __output_student_by_score(self):
            """
                根据成绩显示所有学生信息
            :return:
            """
            list_target = self.__manager.order_by_score()
            self.__output_students(list_target)
    
        def __delete_student(self):
            # id = int(input("请输入需要删除的学生编号:"))
            id = self.__input_int("请输入需要删除的学生编号:")
            if self.__manager.remove_student(id):
                print("删除成功")
            else:
                print("删除失败")
    
        def __modify_student(self):
            """
                修改学生信息
            :return:
            """
            stu = StudentModel()
            # stu.id = int(input("请输入需要修改的学生编号:"))
            stu.id= self.__input_int("请输入需要修改的学生编号:")
            stu.name = input("请输入姓名:")
            # stu.age = int(input("请输入年龄:"))
            # stu.score = int(input("请输入成绩:"))
            stu.age = self.__input_int("请输入年龄:")
            stu.score = self.__input_int("请输入成绩::")
    
            if self.__manager.update_student(stu):
                print("修改成功")
            else:
                print("更新失败")
    
        def __display_menu(self):
            """
                显示菜单
            :return:
            """
            print("1) 添加学生")
            print("2) 显示学生")
            print("3) 删除学生")
            print("4) 修改学生")
            print("5) 按照成绩降序排列")
    
        def __select_menu(self):
            """
            选择菜单
            :return:
            """
            number = input("请输入选项:")
            if number == "1":
                self.__input_students()
            elif number == "2":
                self.__output_students(self.__manager.list_stu)
            elif number == "3":
                self.__delete_student()
            elif number == "4":
                self.__modify_student()
            elif number == "5":
                self.__output_student_by_score()
    
        def main(self):
            """
                界面入口方法
            :return:
            """
            while True:
                self.__display_menu()
                self.__select_menu()

          

  • 相关阅读:
    揭示同步块索引(下):总结
    关于.NET技术体系的思维导图
    嵌入式Linux中摄像头使用简要整理
    Tslib和Qt 4.8.4与在开发板上的移植
    图像处理经典图片Lena背后的故事
    Linux 下编译安装OpenCV
    Linux 下编译、安装、配置 QT
    Qt Creator的配置和开发初步测试
    OpenCV的第一个小程序:读取图像并显示
    转:智能手机Flash/DRAM选择、配置与价格大全
  • 原文地址:https://www.cnblogs.com/yuxiangyang/p/10738132.html
Copyright © 2011-2022 走看看