异常的捕获和处理
1.什么是异常
异常就是代码中的错误,例如:语法错误、缩进错误、逻辑错误等
异常会中断代码的执行
2、异常的处理
为了解决代码出现问题就不会执行的情况,然后作出的特殊的操作
异常例子:
i = 4 / 0
print(i)
Traceback (most recent call last):
File "D:/code/class59/day09/demo02.py", line 2, in <module>
i = 4 / 0
ZeroDivisionError: division by zero
print("这是模块文件的开始")
zhangwuji
print("这是模块文件的结束")
Traceback (most recent call last):
File "D:/code/class59/day09/demo01.py", line 3, in <module>
zhangwuji
NameError: name 'zhangwuji' is not defined
这是模块文件的开始
异常捕获的语法
try:
保护的代码
except 异常的类型:
print("对于上述异常的处理")
案例:处理单个异常
try:
zhangwuji
i = 4 / 0
print(i)
except ZeroDivisionError:
print("我是处理除零错误的")
案例:处理多种异常类型
try:
i = 4 / 0
print(i)
zhangwuji
# 一个Except只能处理一种异常类型
except NameError:
print("我是处理名字没有定义的")
except ZeroDivisionError:
print("我是处理分母不能为零的")
案例:处理所有的异常类型
# 处理所有的异常类型
try:
zhangwuji
i = 4 / 0
print(i)
# Exception可以处理任意类型的异常
except Exception:
print("我可以处理任意类型的异常")
案例:获取异常的详细信息
# 获取异常的详细信息
try:
zhangwuji
i = 4 / 0
print(i)
# Exception可以处理任意类型的异常
except Exception as e:
print("我可以处理任意类型的异常")
# ame 'zhangwuji' is not defined 输出的只是异常的详细信息
print(e)
案例:捕获所有异常类型简写
import traceback
try:
i = 4 / 0
print(i)
zhangwuji
# Exception可以处理任意类型的异常
# except后面不写Exception,也是捕获任意类型的异常,这是简写
# 简写的时候,在获取异常的详细信息的时候直接使用as 就不行了,要利用内置traceback模块获取内容
except:
print("我可以处理任意类型的异常")
# 获取本次异常的报错信息
print(traceback.format_exc())
3.else和finally子句
import traceback
try:
i = 4 / 0
print(i)
zhangwuji
# Exception可以处理任意类型的异常
# except后面不写Exception,也是捕获任意类型的异常,这是简写
# 简写的时候,在获取异常的详细信息的时候直接使用as 就不行了,要利用内置traceback模块获取内容
except:
print("我可以处理任意类型的异常")
# 获取本次异常的报错信息
print(traceback.format_exc())
# try语句块下面缩进的代码没有异常,才会执行else下面的语句块
else:
print("我是else语句")
# finally语句必须放在else后面
# finally下面的语句块是有没有错误都要执行
finally:
print("我是finally语句")
4.异常的就近捕获原则
# 下面的案例,是有就近原则,
def f1():
try:
print("*********f1开始********")
张无忌
print("*********f1结束********")
except:
print("f1捕获了!!!")
def f2():
try:
print("*********f2开始********")
f1()
print("*********f2结束********")
except:
print("f2捕获了!!!")
def f3():
try:
print("*********f3开始********")
f2()
print("*********f3结束********")
except:
print("f3捕获了!!!")
f3()
5.异常的抛出
# 村
def f1():
try:
print("*********f1开始********")
张无忌
print("*********f1结束********")
except:
# 抛出异常
raise
# 镇
def f2():
try:
print("*********f2开始********")
f1()
print("*********f2结束********")
except:
raise
# 县
def f3():
try:
print("*********f3开始********")
f2()
print("*********f3结束********")
except:
# print("f3捕获了!!!")
raise
f3()
os模块
import os
# Windows操作系统返回的是 nt “Microsoft Windows NT”
# print(os.name)
# 查看系统的环境变量
# print(os.environ['JAVA_HOME'])
#
# for root, dirs, files in os.walk(".", topdown=False):
# '''
# root:路径
# dirs :[] 文件夹
# files : 文件
# '''
# print(root)
# print(dirs)
# print(files)
# print("***********************")
# 列出某个目录下的文件(文件名)或者文件夹
# print(os.listdir('F:\桌面壁纸'))
# 删除目录(文件夹)
# os.rmdir("F:\桌面壁纸\新建文件夹")
# 删除文件
# os.remove("F:\桌面壁纸\新建 XLS 工作表.xls")
# 对文件进行重命名
# os.rename(r"F:\桌面壁纸\cRwPlRY.jpg",r"F:\桌面壁纸\4.jpg")
# 创建目录
# os.mkdir("F:\桌面壁纸\hello")
# 获取当前目录 (显示的是绝对路径)
# print(os.getcwd())
# 路径的拼接
# p1 = os.path.join(r"F:\视频","python","str1.py")
# print(p1)
# 将路径分隔符号// 转换为\
# new_path = os.path.abspath(r"F://webtest//autotestpytest//outFile//log")
# print(new_path)
# 输出当前路径的最底层目录
# a = os.path.basename(r'F:\桌面壁纸\hello')
# print(a)
#将传入的路径以最后一个分隔符,进行分割,形成一个元组,
# ('F:\\webtest\\autotestpytest', 'libs')
# c = os.path.split(r'F:\webtest\autotestpytest\libs')
# print(c)
#用于判断传入的路径是否存在 , 存在则返回true 不存在则返回false
# print(os.path.exists(r"D:\tools12"))
#判断是否为绝对路径,如果是绝对路径则返回TRUE ,否则返回false
# print(os.path.isabs(r'D:\tools'))
#判断传入的是不是文件
# print(os.path.isfile(r'D:\tools\WebStorm 2020.1.1.rar'))
# 判断传入的是不是路径
# print(os.path.isdir(r"D:\tools"))
random
import random
# 生成一个指定范围的随机整数, 整体是闭区间
# print(random.randint(1, 2))
# 随机从列表中取出一个元素
# names = ["马蓉", "李小璐", "金莲"]
# print(random.choice(names))
# 生成0到1直接的随机小数
# print(random.random())
# 生成一个指定范围之内随机整数,左闭右开的区间
# print(random.randrange(1, 3))
# names = ["马蓉", "李小璐", "金莲", "白百合"]
# # 从当前列表中随机取三个值
# print(random.sample(names, 3))
# uniform 在指定范围内随机生成一个浮点数
print(random.uniform(10, 14))
time模块
# 时间戳
import time
# # 这是1970年1月1号 0 0 0 到现在度过秒数
# print(time.time()) # 1649408811.9439282
# 返回的内容,当成一个元组来处理即可
"""
(tm_year=2022, tm_mon=4, tm_mday=8, tm_hour=17, tm_min=9, tm_sec=4, tm_wday=4, tm_yday=98, tm_isdst=0)
tm_year :年
tm_mon :月(1-12)
tm_mday :日(1-31)
tm_hour :时(0-23)
tm_min :分(0-59)
tm_sec :秒(0-59)
tm_wday :星期几(0-6,0表示周日)
tm_yday :一年中的第几天(1-366)
tm_isdst :是否是夏令时(默认为-1)
"""
# 根据下标取值即可
# print(time.localtime())
# 休眠 代码执行到这一行对停顿3秒中在往后执行,单位秒
# print("**********开始********")
# time.sleep(3)
# print("**********结束********")
"""
%a 本地星期名称的简写(如星期四为Thu)
%A 本地星期名称的全称(如星期四为Thursday)
%b 本地月份名称的简写(如八月份为agu)
%B 本地月份名称的全称(如八月份为august)
%c 本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)
%d 一个月中的第几天(01 - 31)
%f 微妙(范围0.999999)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,0 - 11)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(00 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期字符串(如15/08/01)
%X 本地相应时间字符串(如08:08:10)
%y 去掉世纪的年份(00 - 99)两个数字表示的年份
%Y 完整的年份(4个数字表示年份)
%z 与UTC时间的间隔(如果是本地时间,返回空字符串)
%Z 时区的名字(如果是本地时间,返回空字符串)
%% ‘%’字符
"""
# 格式化输出时间日期 2022-04-08 17:19:04
s = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(s)
import datetime
# 获取内容 输出的结果是2022-04-08 17:21:29.960512
gettime = datetime.datetime.now()
print(gettime)
# 格式化输出
print(gettime.strftime("%Y-%m-%d %H:%M:%S"))