01 异常
什么是异常
bug单词的诞生
异常演示
"""
主动写一段错误代码,演示异常的出现
"""
# 打开文件,不存在的文件 open(文件路径,操作方式,文件编码) 操作方式:r 只读打开 w 创建新的文件 a 追加文件内容
f = open('F:/bill11.txt','r',encoding="UTF-8") # r 读取目标文件
总结
02 异常的捕获
为什么要捕获异常
捕获常规异常
演示
"""
演示捕获异常
"""
# 基本捕获语法(捕获所有异常)
try:
# 可能出现异常的代码写到这块
f = open('F:/bill11.txt','r',encoding="UTF-8") # r 读取目标文件
except:
# 异常处理代码
print("出现异常了,因为文件不存在,我将open的模式,改成w模式去打开")
f = open('F:/bill11.txt', 'w', encoding="UTF-8") # w 创建文件
捕获指定的异常
演示
# 捕获指定的异常
try:
print(age)
except NameError as e:
print("变量名称未定义异常")
print(e)
捕获多个异常
演示
# 捕获多个异常
try:
1 / 0
print(age)
except (NameError,ZeroDivisionError) as e:
print("变量未定义或除于0的异常")
print(e)
异常 else
演示
# 捕获所有异常
try:
# print(name)
print("Hello")
except Exception as e:
print("出现异常了")
else: # 可选
print("好高兴,没有异常")
异常的 finally
演示
# 捕获所有异常
try:
# print(name)
f = open('F:/bill11.txt','r',encoding="UTF-8") # r 读取目标文件
except:
print("出现异常了,因为文件不存在,我将open的模式,改成w模式去打开")
f = open('F:/bill11.txt', 'w', encoding="UTF-8") # w 创建文件
else: # 可选
print("好高兴,没有异常")
finally: # 可选
print("无论是否有异常都会执行")
f.close() # 无论是否有异常都会执行这句,关闭文件代码
总结
03 异常的传递性
演示
"""
演示异常的传递性
"""
# 定义一个出现异常的方法
def func01(): # 异常在func02没有被捕获
print("这是func01开始")
num =1 / 0 # 定义异常python不能除0
print("这是func01结束")
# 定义一个无异常的方法,调用上面的方法
def func02(): # 异常在func02没有被捕获
print("这是func02开始")
func01()
print("这是func02结束")
# 定义一个方法,调用上面的方法
def main(): # 异常在main中被捕获
try:
func02()
except Exception as e:
print(e)
main()
这个案例目的就是告诉我们,捕获异常是不需要深入到异常出现的地方,只需要在最后调用的函数捕获即可因为异常具有传递性
04 模块的概念与导入
什么是模块
模块的导入方式
import 模块名
演示
"""
演示Python的模块导入
"""
# 使用import导入time模块使用sleep功能(函数)
import time # 导入Pyhon内置的模块(time.py这个代码文件。查看模块源代码:ctrl + 鼠标点击模块名)
print("开始")
# 让程序睡眠1秒(阻塞,暂停)
time.sleep(1) # 模块名.功能名
print("结束")
from 模块名 import 功能名
演示
# 使用from导入time的sleep功能(函数)
from time import sleep
print("开始")
# 让程序睡眠1秒(阻塞,暂停)
sleep(1) # 模块名.功能名
print("结束")
from 模块名 import *
# 使用*导入time的全部功能(函数)
from time import * # *表示全部
print("开始")
# 让程序睡眠1秒(阻塞,暂停)
sleep(1) # 模块名.功能名
print("结束")
as 定义别名
演示
# 使用as给特定功能加上别名
import time as t
# 或
from time import sleep as s
print("开始")
# 让程序睡眠1秒(阻塞,暂停)
# t.sleep(1) # 模块名.功能名
s(1) # 模块名.功能名
print("结束")
总结
05 自定义模块并导入
制作自定义模块
演示
创建一个.py文件如:my_module1.py,文件内容如下:
def test(a,b):
print(a + b)
在另一个文件中引入自定义模块
"""
演示自定义模式
"""
# 导入自定义模块适应
import my_module1
my_module1.test(6,8)
注意事项
演示
再创建一个.py文件如:my_module2 内容如下
def test(a,b):
print(a - b)
然后调用自定义模块
"""
演示自定义模式
"""
# 导入自定义模块适应
import my_module1
# 或
# from my_module1 import test
# test(6,8)
# 导入不同模块的同名功能
from my_module1 import test
from my_module2 import test
test(10,4)
测试模块
__main__变量
演示
def test(a,b):
print(a - b)
if __name__ == '__main__': # 直接写main根据代码提示回车就能出来了
test(10,6)
模块中运行
调用模块的文件中运行,只会执行当前文件的代码模块中的测试代码没有执行
__all__变量
演示
首先将自定义模块的内容改为:
def test_a(a,b):
print(a + b)
def test_b(a,b):
print(a - b)
然后调用模块
在自定义模块中使用 __all__ 变量
__all__ =["test_a"]
调用模块
没有使用__all__变量之前模块的所有函数都可以使用,使用了__all__变量之后只能使用__all__变量指定的函数或方法,因为在外部文件调用的模块功能就是来自__all__变量。
注意:这个__all__变量只作用与from my_module2 import *的*号上,你手动指定函数或方法是不受__all__变量影响的
总结
06 自定义包
什么是 Python 包
快速入门
导入包
方式一:
演示
1)创建一个Python包
然后输入包名如:my_package
然后就可以在这个包下创建模块
然后输入模块名如:my_module1 内容如下:
"""
自定义模块1
"""
def info_print1():
print("我是模块1的功能函数代码")
再创建一个模块2 模块名称,如:my_module2 内容如下:
"""
自定义模块2
"""
def info_print2():
print("我是模块2的功能函数代码")
调用包内的模块
"""
演示Python的包
"""
# 创建一个包
# 导入自定义包中的模块,并使用
import my_package.my_module1
import my_package.my_module2
my_package.my_module1.info_print1()
my_package.my_module2.info_print2()
print("------------或 使用 from的形式直接导入模块------------")
# 或 使用 from的形式直接导入模块
from my_package import my_module1
from my_package import my_module2
my_module1.info_print1()
my_module2.info_print2()
print("------------再或者直接到如模块内容对应的功能函数------------")
# 再或者直接到如模块内容对应的功能函数
from my_package.my_module1 import info_print1
from my_package.my_module2 import info_print2
info_print1()
info_print2()
导入包-方式2
演示
在__init__.py文件中使用__all__变量来控制 import * 方式导入的行为
__all__ = ["my_module1"]
调用模块验证一下
# 通过__all__变量,控制 import *
from my_package import *
my_module1.info_print1()
my_module2.info_print2() # 在__all__变量中没有存入my_module2所以这里直接报错了
总结
07 安装第三方包
什么是第三方包
安装第三方的包 - pip
演示
window + R 输入:cmd打开命令提示符
首先确保你的电脑安装了Python,可以输入:python -V # 测试,有版本号出现就是安装了,没有就去安装一下Java环境安装、python环境安装、Burpsuite安装_正经人_____的博客-CSDN博客
废话不多说直接安装python第三方包输入:pip install 第三方包名
例:pip install numpy
检测包有没有安装成功
pip的网络优化
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
https://pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的一个网站,可供pip程序下载第三方包
安装第三方包- PyCharn
演示
-i https://pypi.tuna.tsinghua.edu.cn/simple
总结
08 Python异常、模块、包:综合案例
演示
1)创建一个自定义包,名称为:my_utils(我的工具)
2)在包内提供2个模块
str_util.py ( 字符串相关工具,内含:)
- 函数:str_reverse(s),接受传入字符串,将字符串反转返回
- 函数:substr(s, x, y),按照下标x和y,对字符串进行切片
文件内代码
def str_reverse(s):
"""
str_reverse 字符串反转函数
:param s: 接收传入的字符串
:return: 返回反转后的字符串
"""
my_str = s[::-1] # 通过字符串切片操作把字符反转
return my_str
def substr(s,x,y):
"""
substr 接收字符串与开始索引、结束索引的切片函数
:param s: 接收一个字符串
:param x: 接收切片的开始索引
:param y: 接收切片的结束索引,切片不包含结束索引的字符
:return: None
"""
my_str = s[x:y:1]
print(f"切片后的字符串:{my_str}")
if __name__ == '__main__': # 测试模块
new_my_str = str_reverse("1,2,3,4,5,6,7,8")
print(f"new_my_str:{new_my_str}")
substr("123456789",1,6)
运行结果
file_util.py(文件处理相关工具,内含:)
- 函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
- 函数:append_to_file(file_name, data),接收文件路径以及传入数据,将数据追加写入到文件中
def print_file_info(file_name):
"""
print_file_info ,打印文件内容的函数
:param file_name: 接收传入文件的路径
:return: Nane
"""
try:
f = open(file_name, 'r', encoding="UTF-8") # r 读取目标文件
except:
print("出现异常了,因为文件不存在",file_name)
f.close() # 关闭文件
else: # 没有异常
print(f"{f.read()}")
f.close() # 关闭文件
def append_to_file(file_name, data):
"""
append_to_file 追加文件内容的函数
:param file_name: 接收文件路径
:param data: 接收要追加的文件数据
:return: Nane
"""
f = open(file_name, 'a', encoding="UTF-8") # a 追加
f.write(data) # 内容写入到内存中
f.flush() # # 将内存积攒的内容写入到电脑的硬盘文件中
f_r = open(file_name, 'r', encoding="UTF-8") # r 读取目标文件
print(f"追加后的文件内容:{f_r.read()}")
f.close() # 关闭文件
if __name__ == '__main__': # 测试模块
print_file_info(file_name="F:/test.txt")
append_to_file(file_name="F:/test.txt",data="\n你好,李银河")
运行结果