上节课程学习了关于Python中的面向对象基础部分,下面我们将继续学习Python的核心知识
一、异常
**异常:**就是程序运行过程中出现的错误,会中断程序的正常执行
1.1异常处理
**①不做处理:**整个程序因为一个BUG,中断执行
②捕获异常 :按照我们自己的处理方式,处理完程序继续运行
--捕获方式:

示例:
python
# 异常
try:
print("= = = = = = = = = = = = = = = = = = ")
# print(my_name)
print(1/0)
print("= = = = = = = = = = = = = = = = = = ")
except NameError as e:
print("名字不存在!异常信息:",e)
except ZeroDivisionError as e:
print("除数不能为0!异常信息:",e)
1.2异常传递
异常传递就是异常在函数调用中层层上报的过程,直到有人处理它,或者程序奔溃
二、AI项目基础
大模型部署分为:

2.1本地部署
ollama是一个运行在本地、管理大语言模型的工具。官网:https://ollama.com
直接下载即可!!!然后可以在官网找到要下载的AI模型

我这里选择的时deepseek的r1模型,根据自己电脑的硬件情况来选择按照版本!

2.2官方开放 API
首先去deepseek官网创建一个APIkey,创建好的如下图所示:

2.3代码调用DeepSeek
在DeepSeek的API文档当中就有使用python代码调用deepseek,网址:https://api-docs.deepseek.com/zh-cn/

我把代码直接复制在这里:
python
import os
from openai import OpenAI
# 创建与大模型交互的客户端对象
client = OpenAI(
# DEEPSEEK_API_KEY是环境变量的名字,值就是DeepSeekAPIKey的值
api_key=os.environ.get('DEEPSEEK_API_KEY'),
base_url="https://api.deepseek.com")
# 与大模型进行交互
response = client.chat.completions.create(
# 所调用的模型
model="deepseek-v4-pro",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "你是谁"},
],
stream=False,
reasoning_effort="high",
extra_body={"thinking": {"type": "enabled"}}
)
# 输出大模型返回的结果
print(response.choices[0].message.content)
2.4提示词工程
**提示词:**是引导大模型进行内容生成的命令

三、AI项目实战
3.1streamlit

以下是streamlit页面:
python
import streamlit as st
st.title("stream第一个程序")
st.header("一级标题")
st.subheader("二级标题")
运行指令(在pycharm终端运行): streamlit run 文件名
3.1.1streamlit基础用法
我将streamlit的基础用法写在了python代码块中:
python
# 段落文字
st.write("这是一段文字")
st.write("这是一段文字")
st.write("这是一段文字")
# 图片
st.image("../resources/logo.png",width=300)
# 音频
st.audio("../resources/news.mp3",width=300)
# 视频
st.video("../resources/news.mp4",width=300)
# logo
st.logo("../resources/logo.png")
# 表格
student_data = {
"姓名": ["王林", "李慕婉", "贝罗", "莫厉海", "石萧"],
"学号": ["20260001", "20260002", "20260003", "20260004", "20260005"],
"语文": [98, 90, 59, 29, 80],
"数学": [88, 78, 65, 70, 39],
"英语": [99, 89, 87, 59, 62],
"总分": [285, 257, 211, 158, 181]
}
st.table(student_data)
# 普通输入框
name = st.text_input("请输入")
st.write(name)
# 密码输入框
password = st.text_input("请输入密码:",type="password")
st.write(f"你输入的密码为:{password}")
# 单选按钮
st.radio("请输入您的性别",["男","女","未知"])
3.1.2streamlit页面布局
python
# 设置页面的配置项
st.set_page_config(
page_title="streamlit页面",
page_icon="🧊",
# 网页的布局
layout="centered",
# 控制侧边栏
initial_sidebar_state="expanded",
menu_items={
'Get Help': 'https://www.extremelycoolapp.com/help',
'Report a bug': "https://ollama.com",
'About': "# This is a header. This is an *extremely* cool app!"
}
)
3.2开发项目
AI伴侣 
系统代码:
python
import streamlit as st
import os
from openai import OpenAI
import datetime
import json
# 脚本文件所在目录(用于定位 logo 等资源文件,避免依赖运行时的当前工作目录)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 设置页面的配置项
st.set_page_config(
page_title="AI智能伴侣 ",
page_icon="🤖",
# 网页的布局
layout="wide",
# 控制侧边栏
initial_sidebar_state="expanded",
menu_items={}
)
# 保存会话信息的函数
def save_session():
if st.session_state.current_session:
# 构建新的会话对象
session_data = {
"current_session": st.session_state.current_session,
"messages": st.session_state.messages,
"nick_name": st.session_state.nick_name,
"personality": st.session_state.personality
}
# 如果session目录不存在,则创建
if not os.path.exists("session"):
os.makedirs("session")
# 保存会话数据
with open(f"session/{st.session_state.current_session}.json", "w", encoding="utf-8") as f:
json.dump(session_data, f, ensure_ascii=False, indent=4)
# 加载所有的列表信息
def load_sessions():
session_list = []
#加载session目录下的所有json文件
if os.path.exists("session"):
file_list = os.listdir("session")
for filename in file_list:
if filename.endswith(".json"):
session_list.append(filename[:-5])
session_list.sort(reverse=True)#降序排序、
return session_list
# 加载指定会话信息
def load_session(session_name):
try:
if os.path.exists(f"session/{session_name}.json"):
# 读取会话数据
with open(f"session/{session_name}.json", "r", encoding="utf-8") as f:
session_data = json.load(f)
st.session_state.messages = session_data["messages"]
st.session_state.nick_name = session_data["nick_name"]
st.session_state.personality = session_data["personality"]
st.session_state.current_session = session_name
except Exception:
st.error("加载会话失败,请检查会话名称是否正确")
# 删除会话信息
def delete_session(session_name):
try:
if os.path.exists(f"session/{session_name}.json"):
os.remove(f"session/{session_name}.json")
#如果删除的是当前会话,则需要更新消息列表
if session_name == st.session_state.current_session:
st.session_state.messages = []
st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
except Exception:
st.error("删除会话失败,请检查会话名称是否正确")
# 大标题
st.title("AI智能伴侣 ")
st.logo(os.path.join(BASE_DIR, "..", "resources", "logo.png"))
# 创建与大模型交互的客户端对象
client = OpenAI(
api_key=os.environ.get('DEEPSEEK_API_KEY'),
base_url="https://api.deepseek.com")
# 系统提示词
system_prompt = """
你叫%s,现在是用户的真实伴侣,请完全代入伴侣角色。:
规则:
1. 每次只回1条消息
2. 禁止任何场景或状态描述性文字
3. 匹配用户的语言
4. 回复简短,像微信聊天一样
5. 有需要的话可以用❤️🌸等emoji表情
6. 用符合伴侣性格的方式对话
7. 回复的内容, 要充分体现伴侣的性格特征
伴侣性格:
- %s
你必须严格遵守上述规则来回复用户。
"""
# 初始化聊天信息
if "messages" not in st.session_state:
st.session_state.messages = []
# 昵称
if "nick_name" not in st.session_state:
st.session_state.nick_name = "噜噜"
# 性格
if "personality" not in st.session_state:
st.session_state.personality = "活泼开朗的东北姑娘"
# 会话标识
if "current_session" not in st.session_state:
st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
# 展示聊天信息
st.text(f"会话名称:{st.session_state.current_session}")
for message in st.session_state.messages:
if message["role"] == "user":
st.chat_message("user").write(message["content"])
elif message["role"] == "assistant":
st.chat_message("assistant").write(message["content"])
# 左侧的侧边栏
with st.sidebar:
# 会话管理
st.subheader("AI控制面板")
# 新建会话
if st.button("新建会话",width="stretch",icon="✒️"):
# 1.保存当前会话信息
save_session()
#2.创建新的会话
if st.session_state.messages:#如果聊天信息非空,True;否则,False
st.session_state.messages = []
st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
save_session()
# 重新运行当前页面
st.rerun()
# 会话历史
st.text("会话历史")
session_list = load_sessions()
for session in session_list:
col1,col2 = st.columns([4, 1])
with col1:
# 加载会话信息
if st.button(session,width="stretch", icon="📃",key=f"load_{session}",type="primary" if session == st.session_state.current_session else "secondary"):
load_session(session)
st.rerun()
with col2:
# 删除会话
if st.button("", width="stretch", icon="❎️",key=f"delete_{session}"):
delete_session(session)
st.rerun()
#分割线
st.divider()
# 伴侣
st.subheader("伴侣信息")
# 昵称
nick_name = st.text_input("昵称",placeholder="请输入昵称")
if nick_name:
st.session_state.nick_name = nick_name
#性格
personality = st.text_area("性格",placeholder="请输入性格")
if personality:
st.session_state.personality = personality
# 聊天消息的输入框
prompt = st.chat_input("请输入你要问的问题")
# 在if中,字符串会自动转换为bool值
if prompt:
# 展示用户输入的问题
st.chat_message("user").write(prompt)
print("------------------------------>这是调用AI大模型,提示词:", prompt)
# 添加用户消息到会话状态
st.session_state.messages.append({"role": "user", "content": prompt})
# 调用AI大模型
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=[
{"role": "system", "content": system_prompt % (st.session_state.nick_name, st.session_state.personality)},
*st.session_state.messages
],
stream=True
)
# 创建一个空的容器来显示大模型的返回结果
response_message = st.empty()
full_response = ""
for chunk in response:
if chunk.choices[0].delta.content is not None:
content = chunk.choices[0].delta.content
full_response += content
response_message.chat_message("assistant").write(full_response)
#保存大模型返回的结果
st.session_state.messages.append({"role": "assistant", "content": full_response})
#保存会话信息
save_session()
3.3文件操作
**文件操作就是分为:**打开、读\写、关闭

读文件代码示例:
python
# 读文件
# 1、打开文件
file = open("出师表.txt", "r", encoding="utf-8")
# 2、读取文件(一次性读取所有内容)
# content = file.read()
# 2、读取文件(一行生成)
content = file.readlines()
for line in content:
print(line.strip())
# 3、关闭文件
file.close()
写文件代码示例:
python
# 写文件
# 1、打开文件
file = open("静夜思.txt", "w", encoding="utf-8")
# 2、写文件
file.write("静夜思(李白)\n")
file.write("床前明月光,疑是地上霜。\n")
file.write("举头望明月,低头思故乡。\n")
# 3、关闭文件
file.close()
3.3.1资源释放
繁琐的方式:

简单的方式:

3.3.2json文件


写入json文件:
python
# 写入json文件
import json
# 写入json数据文件
user = {
"name": "张三",
"age": 18,
"hobby": ["看电影", "听音乐"]
}
with open("user.json","w",encoding="utf-8") as f:
# 把user这个对象转化为json这个字符串写入f
# ensure_ascii:默认为True,确保所有的输出的数据都是ascii编码,设置为False则输出中文
# indent:设置缩进
json.dump(user,f,ensure_ascii=False,indent=2)
读取json文件
python
# 写入json文件
import json
# 读取json文件
with open("user.json","r",encoding="utf-8") as f:
user = json.load(f)
print(user)
print(type(user))