一、异常捕获
异常捕获方式:
1) try...except...
2)try...except Exception as e
3)try...except ValueError...
4)try...except(indexError,KeyError) 分组
5)try...except...finally...
抛出异常方式:raise
二、模块导入
1、什么是模块:.py文件就是模块(实际上.pyc .pyo 【so dll动态库】)
什么是包:包含了__init__.py的模块的文件夹(目录)就是
2、模块和包的作用:为了组织管理代码
3、模块的导入方式
from ... import ... :可以简化模块调用
import ... :可以导入模块;也可以导入包 路径.路径.模块名 路径从项目根目录开始
模块导入:使用其他模块里面的函数,变量,类等就叫模块导入。
4、模块分类:内置模块;第三方模块;自定义模块
5、__name__ 当前文件的模块名
通过模块导入形式运行的,__name__就是模块名
直接运行的文件,__name__就是固定的:__main__
if __name__ == "__main__":
print("......")
#测试代码
扩展:
from ... import * 从模块当中导入所有的代码 可能会和这个模块里的函数重名
from ... import sth as other 取别名,避免重名
模块导入的搜索路径:
import sys
print(sys.path)
附带代码:
# 导入系统模块
import datetime
import os# 导入第三方模块
import pytest
from openpyxl import Workbook# 导入自定义模块
from local_module import local_class# 在代码的最下方
def main():"""注释"""pass# 根据 __name__ 判断是否执行下方代码
if __name__ == "__main__":main()
上期答案:
# !/usr/bin/python3 # Author: wuyi # --*--coding: utf-8 --*-- # @Time: 2020/11/26 13:52 # @file: t_11异常捕获.py""" 异常作业 1. 异常捕获的语法是什么样的? 请列举你会的错误类型。 2. 输入用户的体重身高,计算 bmi, (规则前面作业有) 考虑异常情况 3.编写如下程序 优化去生鲜超市买橘子程序 a.收银员输入橘子的价格,单位:元/斤 b.收银员输入用户购买橘子的重量,单位:斤 c.计算并且 输出 付款金额 新需求: d.使用捕获异常的方式,来处理用户输入无效数据的情况 """# 1. 异常捕获的语法是什么样的? 请列举你会的错误类型。 # IndexError: list index out of range 下标索引超出序列边界 # ZeroDivisionError: division by zero # TypeError: unsupported operand type(s) for /: 'int' and 'str' 传入的对象类型与要求不符 # IndentationError: unexpected indent # NameError: name 'a' is not defined 使用一个还未赋予对象的变量 # SyntaxError: invalid syntax 代码逻辑语法出错,不能执行;不能去捕获 # KeyError: 'k' 试图访问字典中不存在的键 # ValueError: could not convert string to float: 't' 传入一个不被期望的值,即使类型正常 # ImportError:无法导入模块或包 # IOError:输入输出异常。文件操作# try 要运行的有可能发生异常的代码: # 代码 # except 异常: # 出现异常的时候要执行的操作(运行的代码),记录日志# 2. 输入用户的体重身高,计算 bmi, (规则前面作业有) # 题目:输入一个人的身高(m)和体重(kg),根据BMI公式(体重除以身高的平方)计算他的BMI指数 # a.例如:一个65公斤的人,身高是1.62m,则BMI为 : 65 / 1.62 ** 2 = 24.8 # b.根据BMI指数,给与相应提醒 # 低于18.5: 过轻 18.5-25: 正常 25-28: 过重 28-32: 肥胖 高于32: 严重肥胖 # 考虑异常情况 # def bmi(height, weight): # bmi = weight / height ** 2 # if bmi < 18.5: # return "过轻" # elif 18.5 <= bmi <= 25: # return "正常" # elif 25 <= bmi <= 28: # return "过重" # elif 28 <= bmi <= 32: # return "肥胖" # elif bmi > 32: # return "严重肥胖" # # # height = "a" # weight = "b" # try: # print(bmi(height, weight)) # except ZeroDivisionError: # print("height 不能为0") # except TypeError: # print("必须输入2个数字类型")# 3.编写如下程序 # 优化去生鲜超市买橘子程序 # a.收银员输入橘子的价格,单位:元/斤 # b.收银员输入用户购买橘子的重量,单位:斤 # c.计算并且 输出 付款金额 # 新需求: # d.使用捕获异常的方式,来处理用户输入无效数据的情况price = input("请输入橘子单价:") weight = input("请输入橘子重量:")try:price = float(price)weight = float(weight) except ValueError:print("必须输入2个数字类型")if price >= 0 and weight > 0:print(price*weight) else:raise ValueError("不能为负数")# 有负数# 重新输入# raise ValueError("不能为负数")