目录
Python异常
概念解释:致使Python解释器无法运作的错误,即BUG
异常的捕获
概念&作用:提前假设某处会出现异常,做好提前准备,当真出现问题时所弥补的后续手段,目的在于不因一个BUG导致程序的整体崩溃
常规异常捕获
try: 可能发生错误的代码 except: 如果出现错误要执行的代码
# 常规异常捕获
try: # 检测异常
f = open("C:/Users/86186/Desktop/PCP/file.txt","r",encoding="UTF-8") # 只读模式
f.write("text_file_r") # 写入操作——错误——转至except
f.flush()
print(f.read())
f.close()
except: # 修正手段
print("出现错误,修改文件访问方式") # 输出
f = open("C:/Users/86186/Desktop/PCP/file.txt","w",encoding="UTF-8") # 可写模式
f.write("text_file_w") # 写入内容
f.flush() # 刷新缓冲区
print("文件重置完成") # 输出
f.close() # 关闭文件
f = open("C:/Users/86186/Desktop/PCP/file.txt","r",encoding="UTF-8") # 只读模式
print(f"输出文件内容:{f.read()}") # 输出文件内容
f.close() # 关闭文件
# 输出结果:
# 出现错误,修改文件访问方式
# 文件重置完成
# 输出文件内容:text_file_w
注意事项
- 关于常规异常捕获只需要正确使用try&except语法即可,但需要注意缩进
- 若except下代码出现异常,程序依旧会报错
指定异常捕获
# 基本语法: try: 可能发生错误的代码 except ZeroDivisionError as e: print(f"异常类型为{e}")
# 指定异常捕获
try: # 检测异常
1/0 # 预计为 ZeroDivisionError 即除零异常
except ZeroDivisionError as e: # 修正手段
print(f"出现了变量未定义的异常:{e}") # 输出
print("指定异常捕获成功")
# 输出结果:
# 出现了变量未定义的异常:division by zero
# 指定异常捕获成功
注意事项
- 如果尝试执行的代码的异常类型与要捕获的异常类型不同,则无法捕获
- 一般try下只写一行尝试执行的代码,若一段代码同时出现多处异常,如果第一处异常符合指定异常则捕获成功程序继续,否则程序报错
多个异常捕获
# 基本语法: try: 可能发生错误的代码 except (异常_1,异常_2,······) as e: print(f"异常类型为{e}")
# 多个异常捕获
try:
1/0
except (NameError,ZeroDivisionError) as e:
print("未定义变量异常或除零异常捕获")
print(f"确认为 {e} 异常\n异常捕获成功")
# 输出结果:
# 未定义变量异常或除零异常捕获
# 确认为 division by zero 异常
# 异常捕获成功
注意事项
- 相较于指定异常捕获,多个异常捕获在于可以识别指定的多个异常,只要有异常符合其中之一即可捕获成功
- 多个异常同时出现时会优先捕获符合多个指定异常中最先出问题的异常且后置异常不在捕获
- 若一段代码同时出现多处异常,如果第一处异常符合指定的多个异常则捕获成功程序继续,否则程序报错
全部异常捕获
# 基本语法: try: 可能发生错误的代码 except Exception as e: print(f"异常类型为{e}")
# 全部异常捕获
try:
1/0
except Exception as e:
print(f"确定代码异常类型为:{e}\n异常捕获成功")
# 输出结果:
# 确定代码异常类型为:division by zero
# 异常捕获成功
注意事项
- 最常用的异常捕获方式,同样符合
- 多个异常同时出现时会优先捕获符合多个指定异常中最先出问题的异常且后置异常不在捕获
- 若一段代码同时出现多处异常,如果第一处异常符合所有的异常类型之一则捕获成功程序继续,否则程序报错
else&finally操作
概念&作用:else为程序不出错的情况下执行else内的代码,finally为程序不论出错与否都会执行的代码
# else & finally操作
try:
1<2
except:
print("程序出现异常")
else:
print("程序未出现异常")
finally:
print("判断完成")
# 输出结果:
# 程序未出现异常
# 判断完成
注意事项
- 无注意事项,正确使用语法注意缩进格式即可
Python模块
模块的导入
概念&作用
- Python模块(module)是一个Python文件,以.py结尾,模块可以定义函数,类和变量,模块里也能包含可执行的代码
- 其作用为Python中有各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能,一个模块就是一个工具包,每一个工具包中都有各种不同的工具供我们使用以至于实现不同的功能
注意事项
- 这一部分文字叙述可能比较抽象,可以用不同的组合形式测试同一代码段便于理解
语法:[ from 模块名 ] import [ 模块 | 类 | 变量 | 函数 | * ] [ as 别名 ]
常见的组合形式
import 模块名
注意事项
- 可以实现模块.功能 功能无法单独实现(需要层级关系确认)
from 模块名 import 类、变量、方法(功能)
注意事项
- 模块.功能与功能均可单独实现(无需层级关系确认)
from 模块名 import *
注意事项
- 无法实现模块.功能 功能可以单独实现(无需层级关系确认)
import 模块名 as 别名
注意事项
- 可以实现别名/模块.功能 功能无法单独实现(需要层级关系确认)
from 模块名 import 功能名 as 别名
注意事项
- 无法实现模块.别名 功能 可实现模块.功能 别名的单独实现
# 模块的导入
# import text_file_copy
# import text_file_star
# 导入整个模块
# import time # 可实现time.sleep sleep无法单独实现
# 导入模块中的部分功能
# from time import sleep # 不可实现time.sleep sleep可以单独实现
# 导入模块中的全部功能
# from time import * # 无法实现time.sleep sleep可单独实现
# 赋予模块别名
# import time as TIME # 可实现TIME.sleep time.sleep/sleep无法单独实现
# 赋予功能别名
# from time import sleep as SLEEP # 无法实现time.SLEEP sleep 可实现time.sleep SLEEP
# 实例代码段:
# print("睡眠开始")
# SLEEP()
# print("睡眠结束")
# form可以省略
# as 可以省略
# 可以通过‘.’来确定层级关系
自定义模块
概念&作用:通过自定义模块的方式制作一些Python内置没有但是方便自己的模块
每个Python文件都可以作为一个模板,模块的名称就是文件的名称,文件名称的定义需要符合标识符命名规则
不同模块的同名功能代码段
# 同步测试的解决方案
# from text_file_star import text_file # 自定义模块star
# from text_file_copy import text_file # 自定义模块copy
# show = text_file()
# print(f"调用结果:{show}")
# 输出结果:
# 调用结果:0
# 可见在调用不同模块的同名功能时,后调用的模块会覆盖之前调用模块的同名功能
注意事项
- 当导入多个模块的时候且模块内有同名功能,会调用同名功能的最后一个,换句话说,后面调用的同名功能会一只将前面的同名功能的结果覆盖掉
模块测试:__main__变量
概念&作用:当在模块文件中进行测试代码段的时候,此时当前文件以及所有导入该模块的文件在运行代码段的时候都会同步运行,可以通过 " if __name__ == '__main__' " 来实现只测试当前文件的代码段功能
def func():
return ("返回值:1")
if __name__ == '__main__': # 语法实现代码段只在当前文件运行
print (func()) # 不会影响到其余引用当前文件为模块的代码或文件
功能限制:__all__变量
概念&作用:当在模块文件中有 “ __all__ ” 变量,当模块导入方式使用from 模块名 import * 时,只能一键导入 “ __all__ ” 列表中的指定的功能
# 功能限制
# from text_file_star import *
# print(text_file_1())
# print(text_file_2())
注意事项
- 其变量只针对 " from 模块名 import * " 形式 其余无效
Python包
概念&作用:从物理层面来看,包不过是一个包含各类模块文件的文件夹
其中还包括一个 " __init__.py " 文件以至于将其识别为包,包的本质还是模块,当模块过多时可以通过包来整合管理模块
包的创建
概念&作用:在Pycharm中直接创建Python package文件即可, __init__.py 文件会自动创建
自定义包的导入:语法:import 包名 . 模块名
# 自定义包的导入
import text_package.text_file_package # 导入自定义的包
print(text_package.text_file_package.text_file_1()) # 通过层级关系来使用包内的功能
from text_package.text_file_package import text_file_1,text_file_2 # 导入自定义的包
print(text_file_2()) # 直接使用包的功能
# 输出结果:
# 0
# 1
功能限制:__all__变量
概念&作用:当在模块文件中有 “ __all__ ” 变量,当模块导入方式使用from 模块名 import * 时,只能一键导入 “ __all__ ” 列表中的指定的功能
注意事项
- 其变量只针对 " from 模块名 import * " 形式 其余无效
第三方包的导入
导入方式:Windows - 搜索框 - cmd - 命令提示符 - pip install 第三方包的名称(例如 numpy )
注意事项
- 此时是通过国外服务器进行包的下载,网速不被保证,以下是加速链接,由清华大学提供的高速通道
- https://pypi.tuna.tsinghua.edu.cn/simple (在命令框中使用的时候需要在前加入 -i)
- 整段代码: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
使用方法如下图所示
- 同样在pycharm解释器中同样提供了相关的导入方式
- pycharm - 点击右下角Python3.10(根据自己的版本号可能有变动但是同一位置)- 解释器设置(如果非汉化则是最下面的选项)- 弹出来的界面为你当前所安装的包的名称以及版本 - 点击内框左上角的+号 - 搜索你所要安装包的名称 - 点击后点击左下角安装 - 可以在pycharm程序框下方实时监测安装进度,安装完成也会有弹窗显示
注意事项
- 可以在选项中填写 https://pypi.tuna.tsinghua.edu.cn/simple 提高下载速度
- 如果觉得文字表述抽象,我会在文章最下方附上教学视频链接,点击观看学习即可
常用第三方包介绍
- 科学计算:numpy包 数据分析:pandas包 大数据计算:pyspark包、apach-flink包
- 图形可视化:matplotlib包、pyecharts包 人工智能:tensorflow包
写在最后
如有错误欢迎私聊或评论区指出
一些浅显的看法和知识点汇总 内容引用有黑马课程中的部分内容
视频链接(传送门):
《2022新版黑马程序员python教程,8天python从入门到精通,学python看这套就够了》
异常的捕获:
https://www.bilibili.com/video/BV1qW4y1a7fU?p=91&vd_source=77f607110a61793619d53eda630e2057
模块:
https://www.bilibili.com/video/BV1qW4y1a7fU?p=94&vd_source=77f607110a61793619d53eda630e2057
包:
https://www.bilibili.com/video/BV1qW4y1a7fU?p=96&vd_source=77f607110a61793619d53eda630e2057