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 == "":
self.__input_students()
elif number == "":
self.__output_students(self.__manager.list_stu)
elif number == "":
self.__delete_student()
elif number == "":
self.__modify_student()
elif number == "":
self.__output_student_by_score() def main(self):
"""
界面入口方法
:return:
"""
while True:
self.__display_menu()
self.__select_menu()
Python基础之模块+异常的更多相关文章
- python基础——第三方模块
python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Window ...
- python基础——使用模块
python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- python 基础之 模块
Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文 ...
- #python基础学习模块:marshal 对象的序列化
#标准库地址:https://docs.python.org/2/library/marshal.html"""有时候,要把内存中一个对象持久化保存磁盘或者序列化二进制流 ...
- 【Python之路】第六篇--Python基础之模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- 周末班:Python基础之模块
什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...
- python基础-各模块文章导航
python基础学习日志day5-各模块文章导航 python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html p ...
- python基础----常用模块
一 time模块(时间模块)★★★★ 时间表现形式 在Python中,通常有这三种方式来表示时 ...
随机推荐
- CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基
https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...
- Gitlab_ansible_jenkins三剑客⑥Jenkins和ansible集成
ip 角色 备注 10.11.0.215 jenkins服务器 通过deploy运行jenkins服务,deploy用户做了免秘钥登录ansible服务器 10.11.0.210 ansible服务器 ...
- centos命令安装
1.解决ifconfig命令失效:需要安装net-tools工具 yum install net-tools 2.免密码登录 (1)通过命令,产生公钥信息 ssh-keygen -t rsa 如果提示 ...
- html中去除ul,li标签的样式列表标签的点?
- Appium 测试微信小程序 Webview
通过微信打开debugx5.qq.com,或者直接扫下面二维码 勾选[打开TBS内核Inspector调试功能] Chrome查看页面元素 手机连接电脑,查看是否连接成功.如下展示设备号则为连 ...
- Entitas Learning Document
Entitas Learning Document You can find Entitas project in there Entitas for Unity Github There are a ...
- C++ this指针
成员函数不能定义 this 形参,而是由编译器隐含地定义.成员函数的函数体可以显式使用 this 指针,但不是必须这么做.如果对类成员的引用没有限定,编译器会将这种引用处理成通过 this 指针的引用 ...
- 2、Linux常用功能
防火墙的基本用法 - 启动: systemctl start firewalld - 关闭: systemctl stop firewalld - 查看状态: systemctl status fir ...
- sublime text3 安装package control 插件,解决访问被墙的问题
1.在github上下载Package Control的安装包 https://github.com/wbond/sublime_package_control 2.打开sublime存放插件的目录: ...
- UOJ#370. 【UR #17】滑稽树上滑稽果 动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ370.html 题解 首先易知答案肯定是一条链,因为挂在链的最下面肯定比挂在其他节点上赚. 问题被转化成了从一个集合中不断 ...