一、异常捕获
异常捕获方式:
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("不能为负数")