python使用异常的好处_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()

标签:__,.__,Python,self,stu,模块,time,print,异常

来源: https://www.cnblogs.com/yuxiangyang/p/10738132.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值