提示词实战:让大模型生成可直接运行的 Python 代码
一、引言
在日常开发和学习中,我们经常需要编写 Python 代码来完成各种任务,比如数据处理、文件操作、爬虫开发等。但编写代码的过程可能会花费较多时间,尤其是面对不熟悉的功能模块时,还需要查阅大量文档。大模型的出现为解决这一问题提供了新的思路,通过设计合理的提示词,我们可以让大模型直接生成可运行的 Python 代码,大幅提高工作效率。本文将通过具体的实战案例,详细讲解如何设计提示词,让大模型生成符合需求且能直接运行的 Python 代码,帮助大家掌握这一实用技能。
二、让大模型生成可运行 Python 代码的提示词基础
2.1 明确代码的核心功能需求
要让大模型生成可运行的 Python 代码,首先要在提示词中清晰说明代码需要实现的核心功能。如果功能描述模糊,大模型生成的代码可能无法满足实际需求,甚至出现逻辑错误。
比如,我们需要生成一个 “计算两个数的加减乘除运算” 的 Python 代码,提示词不能只写 “生成一个 Python 计算代码”,而应该明确描述功能:“请生成一个 Python 代码,实现两个整数的加法、减法、乘法和除法运算,要求用户输入两个整数,代码输出每种运算的结果”。这样的提示词能让大模型准确把握代码的核心功能,减少生成无效代码的概率。
2.2 指定代码的输入输出格式
明确代码的输入输出格式,是确保生成的代码可直接运行的关键。输入格式包括用户输入的数据类型、输入方式(如通过 input 函数手动输入、从文件读取等);输出格式包括结果的展示形式(如打印到控制台、保存到文件等)、输出内容的详细程度。
例如,在生成 “统计文本文件中单词出现次数” 的 Python 代码时,提示词需要指定输入输出格式:“请生成一个 Python 代码,功能是统计指定文本文件(文件路径由用户输入)中每个单词的出现次数。输入格式:用户通过 input 函数输入文本文件的绝对路径;输出格式:将每个单词及其出现次数按‘单词:出现次数’的格式打印到控制台,且忽略大小写,排除‘the’‘a’‘an’等常见停用词”。通过这样的描述,大模型生成的代码能准确处理输入输出,避免因格式不明确导致的运行问题。
2.3 说明依赖的第三方库
Python 代码常常需要依赖第三方库来实现特定功能,比如用 pandas 处理数据、用 requests 发送网络请求、用 matplotlib 绘制图表等。如果提示词中不说明需要使用的第三方库,大模型可能会使用不常用的库,或者遗漏必要的库导入语句,导致代码运行时出现 “ModuleNotFoundError” 错误。
因此,在提示词中要明确说明依赖的第三方库。例如,生成 “用 matplotlib 绘制折线图” 的 Python 代码时,提示词应包含:“请生成一个 Python 代码,使用 matplotlib 库绘制一条包含 5 个数据点的折线图。数据点的 x 轴值为 [1,2,3,4,5],y 轴值为 [10,20,15,25,30],要求给图表添加标题‘简单折线图’、x 轴标签‘x 值’、y 轴标签‘y 值’,并显示网格线。代码中需包含 matplotlib 库的导入语句,且确保代码运行后能弹出图表窗口”。这样大模型会准确导入所需库,避免依赖问题。
三、数据处理场景:提示词实战案例
3.1 案例一:CSV 文件数据读取与基本统计分析
3.1.1 需求描述
需要生成一个 Python 代码,实现读取本地 CSV 文件(文件路径由用户指定),对文件中的数值型列进行基本统计分析,包括计算每列的平均值、最大值、最小值、标准差,并将统计结果保存到新的 CSV 文件中。
3.1.2 提示词设计
“请生成一个可直接运行的 Python 代码,功能如下:
- 让用户通过 input 函数输入本地 CSV 文件的绝对路径;
- 使用 pandas 库读取该 CSV 文件,确保能正确处理文件编码(若遇到编码错误,尝试使用‘utf-8’或‘gbk’编码);
- 筛选出文件中的数值型列(int64、float64 类型);
- 对每个数值型列计算以下统计指标:平均值(保留 2 位小数)、最大值、最小值、标准差(保留 2 位小数);
- 将统计结果整理成 DataFrame,索引为统计指标,列名为数值型列名;
- 让用户通过 input 函数输入新 CSV 文件的保存路径,将统计结果保存到该路径下;
- 代码运行过程中,若出现文件不存在、路径错误等异常,需捕获并打印友好的错误提示信息;
- 代码中需包含所有必要的库导入语句(如 pandas)。”
3.1.3 生成的代码及运行验证
import pandas as pd
import os
def analyze_csv_data():
# 获取用户输入的CSV文件路径
input_path = input("请输入CSV文件的绝对路径:")
# 检查文件是否存在
if not os.path.exists(input_path):
print(f"错误:文件 '{input_path}' 不存在,请检查路径是否正确。")
return
# 尝试读取CSV文件,处理编码问题
try:
df = pd.read_csv(input_path, encoding='utf-8')
except UnicodeDecodeError:
try:
df = pd.read_csv(input_path, encoding='gbk')
except Exception as e:
print(f"读取文件时出现错误:{str(e)},无法识别文件编码。")
return
# 筛选数值型列
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
if len(numeric_cols) == 0:
print("该CSV文件中没有数值型列,无法进行统计分析。")
return
# 计算统计指标
stats_data = {}
for col in numeric_cols:
col_data = df[col].dropna() # 去除缺失值
stats_data[col] = {
'平均值': round(col_data.mean(), 2),
'最大值': col_data.max(),
'最小值': col_data.min(),
'标准差': round(col_data.std(), 2)
}
# 整理统计结果为DataFrame
stats_df = pd.DataFrame(stats_data).T # 转置,让列名为统计指标
# 获取保存路径并保存文件
save_path = input("请输入统计结果的保存路径(需包含文件名,如D:/stats_result.csv):")
try:
stats_df.to_csv(save_path, encoding='utf-8-sig')
print(f"统计结果已成功保存到 '{save_path}'。")
except Exception as e:
print(f"保存文件时出现错误:{str(e)},请检查保存路径是否正确。")
# 调用函数执行
if __name__ == "__main__":
analyze_csv_data()
3.1.4 运行验证步骤
- 准备一个包含数值型列的 CSV 文件,如包含 “学生姓名”“语文成绩”“数学成绩”“英语成绩” 的文件;
- 运行上述代码,输入 CSV 文件的绝对路径(如 “D:/students_scores.csv”);
- 代码读取文件后,会自动筛选出 “语文成绩”“数学成绩”“英语成绩” 等数值型列,计算统计指标;
- 输入统计结果的保存路径(如 “D:/scores_stats.csv”);
- 打开保存的文件,查看统计结果是否正确,同时检查代码运行过程中是否有错误提示。
3.2 案例二:Excel 文件多工作表数据合并
3.2.1 需求描述
生成一个 Python 代码,合并 Excel 文件中所有工作表的数据。要求将每个工作表的名称作为一列添加到数据中,最终将合并后的数据保存到新的 Excel 文件的单个工作表中,且能处理工作表中列名不一致的情况(只保留所有工作表共有的列)。
3.2.2 提示词设计
“请生成一个可直接运行的 Python 代码,实现以下功能:
- 提示用户输入需要合并的 Excel 文件绝对路径(支持.xlsx 格式);
- 使用 pandas 库读取该 Excel 文件中的所有工作表;
- 对于每个工作表,添加一列名为‘工作表名称’,值为当前工作表的名称;
- 找出所有工作表共有的列(即每个工作表都存在的列),只保留这些列的数据;
- 将所有工作表处理后的数据合并成一个 DataFrame;
- 提示用户输入合并后 Excel 文件的保存路径(需包含文件名,如 D:/merged_data.xlsx);
- 将合并后的 DataFrame 保存到新 Excel 文件的‘合并结果’工作表中;
- 处理可能出现的异常,如文件不存在、Excel 格式错误、无共有的列等,并打印错误提示;
- 代码需导入必要的库(如 pandas、openpyxl),且确保保存 Excel 文件时使用 openpyxl 引擎。”
3.2.3 生成的代码及运行验证
import pandas as pd
import os
def merge_excel_sheets():
# 获取输入Excel文件路径
input_file = input("请输入需要合并的Excel文件绝对路径(.xlsx格式):")
# 检查文件是否存在及格式是否正确
if not os.path.exists(input_file):
print(f"错误:文件 '{input_file}' 不存在,请检查路径。")
return
if not input_file.endswith('.xlsx'):
print("错误:仅支持.xlsx格式的Excel文件,请选择正确的文件。")
return
# 读取所有工作表
try:
excel_reader = pd.ExcelFile(input_file)
sheet_names = excel_reader.sheet_names
if len(sheet_names) == 0:
print("错误:该Excel文件中没有工作表。")
return
print(f"发现 {len(sheet_names)} 个工作表:{', '.join(sheet_names)}")
except Exception as e:
print(f"读取Excel文件时出错:{str(e)}")
return
# 读取每个工作表数据并添加“工作表名称”列
sheet_dfs = []
for sheet in sheet_names:
try:
df = pd.read_excel(input_file, sheet_name=sheet)
df['工作表名称'] = sheet # 添加工作表名称列
sheet_dfs.append(df)
print(f"成功读取工作表:{sheet},数据行数:{len(df)}")
except Exception as e:
print(f"读取工作表 '{sheet}' 时出错:{str(e)},跳过该工作表。")
if len(sheet_dfs) == 0:
print("错误:没有成功读取到任何工作表数据,无法合并。")
return
# 找出所有工作表共有的列
common_cols = set(sheet_dfs[0].columns)
for df in sheet_dfs[1:]:
common_cols.intersection_update(df.columns)
common_cols = list(common_cols)
if len(common_cols) == 0:
print("错误:所有工作表没有共有的列,无法合并数据。")
return
print(f"所有工作表共有的列:{', '.join(common_cols)}")
# 保留共有的列并合并数据
merged_df = pd.concat([df[common_cols] for df in sheet_dfs], ignore_index=True)
print(f"合并后的数据总行数:{len(merged_df)}")
# 保存合并结果
save_file = input("请输入合并后Excel文件的保存路径(如D:/merged_data.xlsx):")
if not save_file.endswith('.xlsx'):
save_file += '.xlsx' # 自动添加后缀
try:
merged_df.to_excel(save_file, sheet_name='合并结果', index=False, engine='openpyxl')
print(f"合并完成!结果已保存到:{save_file}")
except Exception as e:
print(f"保存文件时出错:{str(e)},请检查保存路径是否有权限。")
# 执行合并函数
if __name__ == "__main__":
merge_excel_sheets()
3.2.4 运行验证步骤
- 准备一个包含多个工作表的 Excel 文件,例如有 “2023 年 1 月销售”“2023 年 2 月销售” 两个工作表,均包含 “商品 ID”“销量”“销售额” 列,且可能有其他不同列;
- 运行代码,输入该 Excel 文件的绝对路径;
- 代码会读取所有工作表,显示工作表名称和数据行数,然后找出共有的列(如 “商品 ID”“销量”“销售额”“工作表名称”);
- 输入保存路径,代码将合并后的数据保存到新 Excel 文件;
- 打开新文件,查看 “合并结果” 工作表,确认数据是否正确合并,且包含 “工作表名称” 列。
四、文件操作场景:提示词实战案例
4.1 案例一:指定文件夹下所有文件的名称与大小统计
4.1.1 需求描述
生成 Python 代码,统计指定文件夹下所有文件(不包含子文件夹)的名称、后缀名、大小(以 KB 为单位,保留 2 位小数),并将统计结果按文件大小从大到小排序后,保存到 TXT 文件中。
4.1.2 提示词设计
“请生成可直接运行的 Python 代码,功能如下:
- 让用户通过 input 函数输入需要统计的文件夹绝对路径;
- 遍历该文件夹下的所有文件(不进入子文件夹);
- 对每个文件,获取以下信息:文件名称(包含后缀)、文件后缀名(如.txt、.png,若没有后缀则记为‘无后缀’)、文件大小(转换为 KB,1KB=1024 字节,保留 2 位小数);
- 将所有文件的统计信息整理成列表,按文件大小从大到小排序(若大小相同,按文件名称字母顺序排序);
- 提示用户输入 TXT 文件的保存路径(需包含文件名,如 D:/file_stats.txt);
- 将排序后的统计信息写入 TXT 文件,每行格式为‘文件名称:xxx,后缀名:xxx,大小:xxx KB’;
- 代码需处理文件夹不存在、权限不足等异常,打印清晰的错误提示;
- 不需要导入额外第三方库(使用 Python 内置的 os 模块即可)。”
4.1.3 生成的代码及运行验证
import os
def统计文件信息():
# 获取文件夹路径
folder_path = input("请输入需要统计的文件夹绝对路径:")
# 检查文件夹是否存在
if not os.path.exists(folder_path):
print(f"错误:文件夹 '{folder_path}' 不存在,请检查路径。")
return
if not os.path.isdir(folder_path):
print(f"错误:'{folder_path}' 不是一个有效的文件夹路径。")
return
# 遍历文件夹下的文件,收集信息
file_info_list = []
try:
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
# 只处理文件,不处理子文件夹
if os.path.isfile(file_path):
# 获取文件大小(字节转KB)
file_size_bytes = os.path.getsize(file_path)
file_size_kb = round(file_size_bytes / 1024, 2)
# 获取文件后缀名
file_ext = os.path.splitext(filename)[1]
if not file_ext:
file_ext = "无后缀"
else:
file_ext = file_ext.lower() # 后缀名统一小写
# 添加到列表
file_info_list.append({
'name': filename,
'ext': file_ext,
'size_kb': file_size_kb
})
except PermissionError:
print(f"错误:没有访问文件夹 '{folder_path}' 的权限,请检查权限设置。")
return
except Exception as e:
print(f"遍历文件夹时出现错误:{str(e)}")
return
if len(file_info_list) == 0:
print("该文件夹下没有文件。")
return
# 按文件大小排序(从大到小),大小相同按名称排序
file_info_list.sort(key=lambda x: (-x['size_kb'], x['name']))
# 获取保存路径并写入TXT
save_path = input("请输入TXT文件的保存路径(如D:/file_stats.txt):")
if not save_path.endswith('.txt'):
save_path += '.txt'
try:
with open(save_path, 'w', encoding='utf-8') as f:
f.write(f"文件夹 '{folder_path}' 的文件统计结果(共 {len(file_info_list)} 个文件)\n")
f.write("="*50 + "\n</doubaocanvas>
for info in file_info_list:
line = f"文件名称:{info ['name']},后缀名:{info ['ext']},大小:{info ['size_kb']} KB\n"
f.write (line)
print (f"文件统计结果已保存到:{save_path}")
except Exception as e:
print (f"保存 TXT 文件时出错:{str (e)},请检查保存路径是否可写。")
执行统计函数
if name == "main":
统计文件信息 ()
#### 4.1.4 运行验证步骤
1. 选择一个包含多个文件(如文档、图片、压缩包)的文件夹,记录其绝对路径;
2. 运行代码,输入该文件夹的绝对路径;
3. 代码会遍历文件夹下的文件,排除子文件夹,收集每个文件的名称、后缀和大小;
4. 输入TXT保存路径(如“D:/doc_folder_stats.txt”);
5. 打开保存的TXT文件,检查内容是否符合“文件名称:xxx,后缀名:xxx,大小:xxx KB”格式,且是否按大小从大到小排序。
### 4.2 案例二:批量重命名指定文件夹下的图片文件
#### 4.2.1 需求描述
生成Python代码,批量重命名指定文件夹下的所有图片文件(支持.jpg、.png、.jpeg格式)。命名规则为“图片_序号”(序号从1开始递增),例如“图片_1.jpg”“图片_2.png”,且重命名过程中保持原文件的后缀格式不变。
#### 4.2.2 提示词设计
“请生成可直接运行的Python代码,功能如下:
1. 提示用户输入图片所在文件夹的绝对路径;
2. 筛选该文件夹下后缀为.jpg、.png、.jpeg的文件(不区分大小写,如.JPG也视为有效格式);
3. 按文件创建时间(最早创建的排最前)对筛选出的图片文件排序;
4. 按“图片_序号.原后缀”的格式批量重命名,序号从1开始递增(如原文件为“photo.png”,排序后为1,则重命名为“图片_1.png”);
5. 重命名过程中,打印每个文件的“原名称→新名称”对应关系;
6. 处理可能的异常,如文件夹不存在、无符合条件的图片文件、文件重命名失败等,并打印错误提示;
7. 仅使用Python内置的os模块,无需导入第三方库。”
#### 4.2.3 生成的代码及运行验证
```python
import os
from datetime import datetime
def batch_rename_images():
# 获取图片文件夹路径
folder_path = input("请输入图片所在文件夹的绝对路径:")
# 检查文件夹是否存在
if not os.path.exists(folder_path):
print(f"错误:文件夹 '{folder_path}' 不存在,请检查路径。")
return
if not os.path.isdir(folder_path):
print(f"错误:'{folder_path}' 不是有效的文件夹路径。")
return
# 筛选图片文件(支持.jpg/.png/.jpeg,不区分大小写)
image_extensions = ('.jpg', '.png', '.jpeg', '.JPG', '.PNG', '.JPEG')
image_files = []
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path) and filename.endswith(image_extensions):
# 获取文件创建时间(Windows用st_ctime,Linux用st_mtime,这里兼容处理)
create_time = os.path.getctime(file_path)
image_files.append((file_path, filename, create_time))
if len(image_files) == 0:
print("该文件夹下没有找到.jpg、.png、.jpeg格式的图片文件。")
return
# 按创建时间排序(最早创建在前)
image_files.sort(key=lambda x: x[2])
# 批量重命名
rename_count = 0
for idx, (file_path, old_name, _) in enumerate(image_files, start=1):
# 获取原文件后缀
old_ext = os.path.splitext(old_name)[1].lower() # 统一后缀为小写(如.JPG→.jpg)
# 构建新名称
new_name = f"图片_{idx}{old_ext}"
new_path = os.path.join(folder_path, new_name)
# 避免新名称与现有文件冲突
if os.path.exists(new_path):
print(f"警告:新名称 '{new_name}' 已存在,跳过文件 '{old_name}'。")
continue
# 执行重命名
try:
os.rename(file_path, new_path)
print(f"成功重命名:{old_name} → {new_name}")
rename_count += 1
except Exception as e:
print(f"重命名 '{old_name}' 时出错:{str(e)},跳过该文件。")
print(f"\n批量重命名完成!共处理 {len(image_files)} 个图片文件,成功重命名 {rename_count} 个。")
# 执行批量重命名函数
if __name__ == "__main__":
batch_rename_images()
4.2.4 运行验证步骤
- 准备一个包含多个图片文件(混合.jpg、.png 格式,且名称不规则)的文件夹;
- 运行代码,输入该文件夹的绝对路径;
- 代码会筛选出图片文件,按创建时间排序,并打印 “原名称→新名称” 的对应关系;
- 重命名完成后,打开文件夹,检查图片文件是否按 “图片_1.jpg”“图片_2.png” 的格式命名;
- 确认无重复名称,且原文件的后缀格式保持正确(如.png 文件仍为.png 后缀)。
五、网络请求场景:提示词实战案例
5.1 案例一:调用公开 API 接口获取数据并解析
5.1.1 需求描述
生成 Python 代码,调用公开的 “天气 API 接口”(以高德地图天气 API 为例,需用户自行提供 API 密钥),根据用户输入的城市名称,获取该城市的实时天气数据(包括温度、天气状况、风力、湿度),并将解析后的结果以清晰的格式打印到控制台。
5.1.2 提示词设计
“请生成可直接运行的 Python 代码,功能如下:
- 提示用户输入高德地图天气 API 的密钥(提示:密钥可在高德开放平台申请,免费版足够使用);
- 提示用户输入需要查询天气的城市名称(如 “北京”“上海”);
- 使用 requests 库发送 GET 请求到高德天气 API(接口地址:https://restapi.amap.com/v3/weather/weatherInfo?key=密钥 & city = 城市名称 & extensions=base);
- 解析 API 返回的 JSON 数据,提取实时天气信息:城市名称、温度(temp)、天气状况(weather)、风力(windpower)、湿度(humidity);
- 按以下格式打印结果:
城市:xxx
实时温度:xxx℃
天气状况:xxx
风力:xxx 级
湿度:xxx%
- 处理可能的异常:API 密钥错误、城市名称无效、网络连接失败、API 返回数据格式错误等,并打印友好的错误提示;
- 代码中需导入 requests 库,并在开头添加注释,说明 API 密钥的申请方式。”
5.1.3 生成的代码及运行验证
# 说明:高德天气API密钥申请方式:
# 1. 访问高德开放平台(https://lbs.amap.com/),注册并登录账号;
# 2. 进入“控制台→应用管理→创建应用”,填写应用名称(如“天气查询”);
# 3. 在应用下添加“Web服务”类型的Key,获取API密钥后使用。
import requests
import json
def get_city_weather():
# 获取API密钥
api_key = input("请输入你的高德地图天气API密钥:").strip()
if not api_key:
print("错误:API密钥不能为空,请重新输入。")
return
# 获取城市名称
city_name = input("请输入需要查询天气的城市名称(如“北京”):").strip()
if not city_name:
print("错误:城市名称不能为空,请重新输入。")
return
# 构建API请求地址
base_url = "https://restapi.amap.com/v3/weather/weatherInfo"
params = {
"key": api_key,
"city": city_name,
"extensions": "base" # extensions=base表示获取实时天气
}
# 发送请求并解析数据
try:
print(f"\n正在查询 {city_name} 的实时天气...")
response = requests.get(base_url, params=params, timeout=10)
response.raise_for_status() # 若状态码非200,抛出HTTPError
# 解析JSON数据
weather_data = response.json()
# 检查API返回状态
status = weather_data.get("status")
if status != "1":
error_msg = weather_data.get("info", "未知错误")
print(f"查询失败:{error_msg}(错误码:{weather_data.get('infocode')})")
return
# 提取天气信息(实时天气在lives列表的第一个元素中)
lives = weather_data.get("lives", [])
if not lives:
print(f"查询失败:未获取到 {city_name} 的天气数据,请检查城市名称是否正确。")
return
realtime_weather = lives[0]
# 提取需要的字段
city = realtime_weather.get("city", "未知城市")
temp = realtime_weather.get("temp", "未知")
weather = realtime_weather.get("weather", "未知")
windpower = realtime_weather.get("windpower", "未知")
humidity = realtime_weather.get("humidity", "未知")
# 打印结果
print("\n" + "="*30)
print(f"城市:{city}")
print(f"实时温度:{temp}℃")
print(f"天气状况:{weather}")
print(f"风力:{windpower}级")
print(f"湿度:{humidity}%")
print("="*30)
except requests.exceptions.Timeout:
print("错误:网络请求超时,请检查网络连接后重试。")
except requests.exceptions.ConnectionError:
print("错误:网络连接失败,请检查网络设置后重试。")
except requests.exceptions.HTTPError as e:
print(f"错误:HTTP请求失败,状态码:{e.response.status_code}")
except json.JSONDecodeError:
print("错误:API返回数据格式错误,无法解析天气信息。")
except Exception as e:
print(f"查询过程中出现未知错误:{str(e)}")
# 执行天气查询函数
if __name__ == "__main__":
get_city_weather()
5.1.4 运行验证步骤
- 按代码开头的说明,在高德开放平台申请 API 密钥;
- 运行代码,输入申请到的 API 密钥;
- 输入需要查询的城市名称(如 “广州”);
- 等待代码发送请求并解析数据,查看控制台是否按指定格式打印天气信息;
- 测试异常情况(如输入错误的 API 密钥、不存在的城市名称、断开网络),检查错误提示是否清晰。
5.2 案例二:简单网页内容爬取(提取新闻标题与链接)
5.2.1 需求描述
生成 Python 代码,爬取指定新闻网站(以 “澎湃新闻” 科技板块为例,URL:https://www.thepaper.cn/channel_25950)的前 10 条新闻标题及对应的新闻链接,将结果保存到 TXT 文件中,每条新闻占一行,格式为 “新闻标题:xxx,新闻链接:xxx”。
5.2.2 提示词设计
“请生成可直接运行的 Python 代码,功能如下:
- 使用 requests 库获取澎湃新闻科技板块页面(URL:https://www.thepaper.cn/channel_25950)的 HTML 内容;
- 使用 BeautifulSoup 库解析 HTML,提取页面中前 10 条新闻的标题和对应的新闻链接;
(提示:通过浏览器 “检查” 功能查看新闻标题的 HTML 标签,澎湃新闻科技板块新闻标题通常在 class 为 “news_title” 的标签中,链接为标签的 href 属性);
- 提示用户输入 TXT 文件的保存路径(如 “D:/thepaper_tech_news.txt”);
- 将提取的新闻标题和链接写入 TXT 文件,每条新闻格式为 “新闻标题:xxx,新闻链接:xxx”,且每条新闻单独占一行;
- 处理可能的异常:网络连接失败、页面解析错误、无新闻数据提取、文件保存失败等,并打印错误提示;
- 代码中需导入 requests 和 bs4 库(from bs4 import BeautifulSoup),并添加注释说明各步骤功能。”
5.2.3 生成的代码及运行验证
import requests
from bs4 import BeautifulSoup
import os
def crawl_tech_news():
# 目标网页URL(澎湃新闻科技板块)
news_url = "https://www.thepaper.cn/channel_25950"
# 请求头(模拟浏览器访问,避免被网站拦截)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
try:
# 步骤1:获取网页HTML内容
print("正在获取澎湃新闻科技板块页面...")
response = requests.get(news_url, headers=headers, timeout=15)
response.raise_for_status() # 状态码非200时抛出异常
response.encoding = response.apparent_encoding # 自动识别编码,避免乱码
html_content = response.text
print("页面获取成功,开始解析新闻数据...")
# 步骤2:解析HTML,提取新闻标题和链接
soup = BeautifulSoup(html_content, "html.parser")
# 查找所有class为"news_title"的<a>标签(新闻标题和链接所在标签)
news_tags = soup.find_all("a", class_="news_title")
if not news_tags:
print("错误:未找到新闻数据,可能是网页结构变化或访问被拦截。")
return
# 取前10条新闻
news_count = min(10, len(news_tags))
news_list = []
for i in range(news_count):
tag = news_tags[i]
# 提取新闻标题(strip()去除前后空格)
news_title = tag.get_text(strip=True)
# 提取新闻链接(处理相对链接,转为完整URL)
news_href = tag.get("href", "")
if news_href.startswith("/"): # 相对链接(如"/newsDetail_forward_123456")
news_href = "https://www.thepaper.cn" + news_href
news_list.append((news_title, news_href))
# 步骤3:获取保存路径并写入TXT
save_path = input("请输入TXT文件的保存路径(如D:/thepaper_tech_news.txt):").strip()
if not save_path:
print("错误:保存路径不能为空,请重新输入。")
return
if not save_path.endswith(".txt"):
save_path += ".txt"
with open(save_path, "w", encoding="utf-8") as f:
f.write(f"澎湃新闻科技板块前{news_count}条新闻(爬取时间:{pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S')})\n")
f.write("="*80 + "\n")
for idx, (title, href) in enumerate(news_list, start=1):
f.write(f"{idx}. 新闻标题:{title},新闻链接:{href}\n")
print(f"\n爬取完成!共提取 {news_count} 条新闻,结果已保存到:{save_path}")
except requests.exceptions.Timeout:
print("错误:网络请求超时,请检查网络连接后重试。")
except requests.exceptions.ConnectionError:
print("错误:网络连接失败,无法访问目标网页。")
except requests.exceptions.HTTPError as e:
print(f"错误:访问网页失败,状态码:{e.response.status_code}(可能是网站拒绝访问)。")
except Exception as e:</doubaocanvas>
print (f"爬取过程中出现未知错误:{str (e)}")
执行新闻爬取函数
if name == "main":
导入 pandas 库(用于时间格式化,之前代码中遗漏导入)
import pandas as pd
crawl_tech_news()
#### 5.2.4 运行验证步骤
1. 确保已安装requests和bs4库(若未安装,在命令行执行“pip install requests beautifulsoup4 pandas”);
2. 运行代码,等待代码获取澎湃新闻科技板块页面并解析;
3. 输入TXT文件保存路径(如“D:/tech_news.txt”);
4. 打开保存的TXT文件,检查是否包含前10条新闻的标题和完整链接,格式是否符合“序号. 新闻标题:xxx,新闻链接:xxx”;
5. 测试异常情况(如断开网络、修改目标URL为无效地址),确认错误提示是否准确。
## 六、代码调试与优化:让生成的Python代码更可靠
### 6.1 常见错误排查与提示词补充技巧
#### 6.1.1 模块导入错误
当大模型生成的代码运行时出现“ModuleNotFoundError”,通常是因为代码中使用了第三方库,但提示词未明确说明需导入该库,或未提醒用户安装。
**解决技巧**:在提示词中明确要求“包含所有必要的库导入语句”,并补充“若使用第三方库,需在代码开头添加注释,说明库的安装命令”。例如,生成数据分析相关代码时,提示词可加入:“代码中需导入pandas和numpy库,并在开头添加注释‘# 安装依赖库:pip install pandas numpy’”。
#### 6.1.2 路径处理错误
代码中涉及文件或文件夹操作时,常出现“FileNotFoundError”,原因是路径格式不规范(如Windows系统路径使用“\”未转义,或相对路径与运行目录不匹配)。
**解决技巧**:在提示词中要求“处理路径时使用os.path模块的函数(如os.path.join、os.path.abspath),避免硬编码路径分隔符”,并提示“若涉及用户输入路径,需检查路径是否存在”。例如,文件操作相关提示词可加入:“使用os.path.join拼接文件路径,确保在Windows和Linux系统下都能正常运行;用户输入路径后,需用os.path.exists验证路径有效性”。
#### 6.1.3 数据类型不匹配
大模型生成的代码可能忽略数据类型转换,导致运行时出现“TypeError”(如将字符串直接用于数值计算)。
**解决技巧**:在提示词中明确数据类型要求,例如“用户输入的数值需转换为int类型后再进行计算,转换前需判断输入是否为有效数字,若不是则提示用户重新输入”。
### 6.2 代码可读性优化的提示词设计
#### 6.2.1 要求添加注释
清晰的注释能让代码更易理解和维护。在提示词中加入“代码需包含三类注释:1. 函数功能注释(说明函数作用、参数和返回值);2. 关键步骤注释(如‘# 筛选数值型列并计算统计指标’);3. 复杂逻辑注释(如‘# 处理Excel文件编码问题,优先尝试utf-8,失败则用gbk’)”。
例如,生成文件统计代码时,大模型会在函数定义处添加:
```python
def 统计文件信息():
"""
统计指定文件夹下所有文件的名称、后缀名和大小,并保存到TXT文件
参数:无(通过用户输入获取文件夹路径和保存路径)
返回值:无(直接打印结果和错误提示)
"""
6.2.2 规范代码格式
要求大模型生成的代码符合 Python PEP8 规范(如缩进用 4 个空格、变量名用小写下划线格式),提示词可加入:“代码需遵循 PEP8 规范,变量名使用小写下划线格式(如 file_path 而非 FilePath),函数名使用小写下划线格式,缩进统一用 4 个空格,每行代码长度不超过 120 字符”。
6.3 代码复用性提升的提示词策略
6.3.1 要求封装为函数
将核心功能封装为函数,能让代码更易复用。提示词中可明确 “将核心逻辑封装为独立函数,函数参数和返回值需清晰定义,主程序通过调用函数执行”。例如,生成天气查询代码时,大模型会将查询逻辑封装为get_city_weather()函数,而非直接写在主程序中。
6.3.2 支持参数配置
对于需要灵活调整的功能,提示词可要求 “代码支持通过参数配置关键参数”。例如,生成数据可视化代码时,提示词可加入:“将图表标题、x 轴标签、y 轴标签设为函数参数,用户调用函数时可自定义这些内容,默认值分别为‘数据图表’‘X 轴’‘Y 轴’”。
示例代码片段:
def draw_line_chart(x_data, y_data, title="数据图表", x_label="X轴", y_label="Y轴"):
"""
绘制折线图
参数:
x_data: 列表,x轴数据
y_data: 列表,y轴数据
title: 字符串,图表标题(默认:数据图表)
x_label: 字符串,x轴标签(默认:X轴)
y_label: 字符串,y轴标签(默认:Y轴)
返回值:无
"""
import matplotlib.pyplot as plt
plt.plot(x_data, y_data)
plt.title(title)
plt.xlabel(x_label)
plt.ylabel(y_label)
plt.show()
# 调用示例
draw_line_chart([1,2,3,4,5], [10,20,15,25,30], title="月度销量趋势", x_label="月份", y_label="销量")
七、实战总结与提示词模板
7.1 不同场景的提示词核心要素
7.1.1 数据处理场景
核心要素:1. 数据来源(如 CSV/Excel 文件、用户输入);2. 处理逻辑(如筛选、统计、合并);3. 输出格式(如保存为文件、打印到控制台);4. 异常处理(如文件不存在、数据缺失)。
模板:“请生成可直接运行的 Python 代码,功能:[描述数据处理需求,如‘读取 Excel 文件并合并多工作表数据’]。要求:1. 数据来源:[说明数据位置,如‘用户输入 Excel 文件路径’];2. 处理逻辑:[详细步骤,如‘筛选数值型列,计算平均值和标准差’];3. 输出格式:[如‘保存到新 CSV 文件,路径由用户输入’];4. 异常处理:[如‘处理文件不存在、编码错误’];5. 包含库导入语句和安装命令,添加关键步骤注释。”
7.1.2 文件操作场景
核心要素:1. 操作对象(如文件 / 文件夹路径);2. 操作类型(如统计、重命名、复制);3. 规则定义(如重命名格式、筛选条件);4. 结果保存(如 TXT 文件、原文件夹覆盖)。
模板:“请生成可直接运行的 Python 代码,功能:[描述文件操作需求,如‘批量重命名文件夹下的图片文件’]。要求:1. 操作对象:[如‘用户输入图片文件夹路径’];2. 操作规则:[如‘按 “图片_序号。原后缀” 命名,序号从 1 开始’];3. 结果处理:[如‘打印重命名日志,跳过已存在的新名称文件’];4. 异常处理:[如‘检查文件夹是否存在、无符合条件文件’];5. 仅使用 Python 内置模块,添加函数注释和步骤说明。”
7.1.3 网络请求场景
核心要素:1. 目标地址(如 API 接口 URL、网页链接);2. 请求方式(如 GET/POST);3. 数据解析(如 JSON 提取、HTML 标签筛选);4. 结果保存(如 TXT 文件、变量返回)。
模板:“请生成可直接运行的 Python 代码,功能:[描述网络请求需求,如‘调用天气 API 获取实时天气’]。要求:1. 目标地址:[如‘高德天气 API:https://restapi.amap.com/v3/weather/weatherInfo’];2. 请求参数:[如‘API 密钥和城市名称由用户输入’];3. 数据解析:[如‘提取温度、天气状况、湿度字段’];4. 结果输出:[如‘按指定格式打印到控制台’];5. 异常处理:[如‘网络超时、API 返回错误’];6. 包含库导入语句和依赖安装命令,添加 API 使用说明注释。”
7.2 提升代码生成效率的额外提示
7.2.1 明确技术栈限制
若对代码使用的库或 Python 版本有要求,需在提示词中明确。例如:“代码需兼容 Python 3.8 及以上版本,仅使用 requests 和内置模块,不允许使用 scrapy 等框架”。
7.2.2 加入示例数据
当需求较复杂时,在提示词中加入示例数据能帮助大模型更准确理解。例如,生成数据排序代码时,提示词可加入:“示例数据:[15,8,23,4,9],代码需对该列表进行升序排序并打印结果”。
7.2.3 分步骤描述需求
对于多步骤任务,按顺序描述需求能减少大模型遗漏步骤的概率。例如,生成 “数据读取→清洗→分析→可视化” 的代码时,提示词可按 “第一步:读取 CSV 文件;第二步:删除缺失值;第三步:计算各列平均值;第四步:用 matplotlib 绘制柱状图” 的顺序编写。
八、实际应用场景扩展
8.1 自动化办公:生成 Excel 报表自动化代码
8.1.1 需求描述
生成 Python 代码,从 CSV 文件读取销售数据(包含 “日期”“产品名称”“销售额”“销量” 字段),按 “产品名称” 分组计算总销售额和总销量,生成带表头样式的 Excel 报表(表头背景色为浅蓝色,字体加粗),并保存到指定路径。
8.1.2 提示词设计
“请生成可直接运行的 Python 代码,功能如下:
- 提示用户输入 CSV 销售数据文件路径(字段:日期、产品名称、销售额、销量);
- 使用 pandas 读取 CSV 文件,删除‘销售额’和‘销量’字段中的缺失值;
- 按‘产品名称’分组,计算每组的‘总销售额’(求和)和‘总销量’(求和);
- 使用 openpyxl 库设置 Excel 报表样式:表头(产品名称、总销售额、总销量)背景色为 #E6F3FF,字体加粗,列宽自适应内容;
- 提示用户输入 Excel 报表保存路径,将分组结果保存到该路径;
- 处理可能的异常:文件不存在、字段缺失、权限不足;
- 代码开头添加注释,说明依赖库安装命令(pip install pandas openpyxl),并添加关键步骤注释。”
8.1.3 生成的代码示例
# 安装依赖库:pip install pandas openpyxl
import pandas as pd
from openpyxl.styles import PatternFill, Font
from openpyxl.utils.dataframe import dataframe_to_rows
import os
def generate_sales_report():
"""
从CSV销售数据生成带样式的Excel报表
功能:读取数据→清洗→分组统计→生成样式化Excel
"""
# 1. 获取CSV文件路径
csv_path = input("请输入CSV销售数据文件路径:").strip()
if not os.path.exists(csv_path) or not csv_path.endswith('.csv'):
print("错误:请输入有效的CSV文件路径。")
return
# 2. 读取并清洗数据
try:
df = pd.read_csv(csv_path, encoding='utf-8')
# 检查必要字段是否存在
required_cols = ['产品名称', '销售额', '销量']
if not all(col in df.columns for col in required_cols):
print(f"错误:CSV文件缺少必要字段,需包含{required_cols}。")
return
# 删除缺失值
df_clean = df.dropna(subset=['销售额', '销量'])
print(f"成功读取数据,清洗后剩余 {len(df_clean)} 行。")
except Exception as e:
print(f"读取CSV文件出错:{str(e)}")
return
# 3. 按产品分组统计
sales_summary = df_clean.groupby('产品名称').agg(
总销售额=('销售额', 'sum'),
总销量=('销量', 'sum')
).reset_index()
print("分组统计完成,准备生成Excel报表...")
# 4. 生成带样式的Excel
save_path = input("请输入Excel报表保存路径(如D:/sales_report.xlsx):").strip()
if not save_path.endswith('.xlsx'):
save_path += '.xlsx'
try:
# 创建Excel写入器
with pd.ExcelWriter(save_path, engine='openpyxl') as writer:
sales_summary.to_excel(writer, sheet_name='销售汇总', index=False)
# 获取工作表对象
ws = writer.sheets['销售汇总']
# 设置表头样式(背景色#E6F3FF,字体加粗)
header_fill = PatternFill(start_color='E6F3FF', end_color='E6F3FF', fill_type='solid')
header_font = Font(bold=True)
for cell in ws[1]: # 表头在第1行
cell.fill = header_fill
cell.font = header_font
# 自适应列宽
for column in ws.columns:
max_length = 0
column_letter = column[0].column_letter # 获取列字母(如A、B)
for cell in column:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = min(max_length + 2, 20) # 限制最大宽度为20
ws.column_dimensions[column_letter].width = adjusted_width
print(f"Excel报表已保存到:{save_path}")
except Exception as e:
print(f"生成Excel报表出错:{str(e)}")
# 执行函数
if __name__ == "__main__":
generate_sales_report()
8.2 机器学习:生成数据预处理基础代码
8.2.1 需求描述
生成 Python 代码,读取鸢尾花数据集(从 sklearn 库加载),对特征数据(萼片长度、萼片宽度、花瓣长度、花瓣宽度)进行预处理:1. 标准化(均值为 0,标准差为 1);2. 划分训练集和测试集(测试集占比 30%,随机种子设为 42);3. 打印预处理后的训练集和测试集形状,以及标准化后的特征均值和标准差。
8.2.2 提示词设计
“请生成可直接运行的 Python 代码,功能如下:
- 从 sklearn.datasets 加载鸢尾花数据集,提取特征数据(X)和标签(y);
- 使用 sklearn.preprocessing.StandardScaler 对特征数据 X 进行标准化;
- 使用 sklearn.model_selection.train_test_split 划分训练集(X_train, y_train)和测试集(X_test, y_test),测试集占比 30%,random_state=42;
- 打印以下信息:(1)原始数据形状、训练集形状、测试集形状;(2)标准化后训练集各特征的均值(保留 2 位小数)和标准差(保留 2 位小数);
- 处理可能的导入错误(如 sklearn 未安装),代码开头添加依赖安装命令(pip install scikit-learn);
- 添加函数注释和关键步骤说明,变量名符合 PEP8 规范。”
8.2.3 生成的代码示例
# 安装依赖库:pip install scikit-learn pandas
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import pandas as pd
def iris_data_preprocessing():
"""
鸢尾花数据集预处理:加载数据→标准化→划分训练测试集
返回:X_train_scaled, X_test_scaled, y_train, y_test(标准化后的训练测试集和标签)
"""
# 1. 加载鸢尾花数据集
try:
iris = load_iris()
X = iris.data # 特征数据(4个特征)
y = iris.target # 标签
feature_names = iris.feature_names # 特征名称
print(f"成功加载鸢尾花数据集:原始数据形状 X={X.shape}, y={y.shape}")
except ImportError:
print("</doubaocanvas>
错误:未安装 scikit-learn 库,请先执行命令 “pip install scikit-learn” 安装依赖。
return None, None, None, None
except Exception as e:
print (f"加载数据集时出错:{str (e)}")
return None, None, None, None
2. 划分训练集和测试集(先划分再标准化,避免数据泄露)
X_train, X_test, y_train, y_test = train_test_split (
X, y, test_size=0.3, random_state=42, stratify=y # stratify=y 保证标签分布一致
)
print (f"数据集划分完成:训练集 X_train={X_train.shape}, 测试集 X_test={X_test.shape}")
3. 对特征数据进行标准化(仅用训练集拟合 scaler,避免测试集信息泄露)
scaler = StandardScaler ()
X_train_scaled = scaler.fit_transform (X_train) # 训练集:拟合 + 转换
X_test_scaled = scaler.transform (X_test) # 测试集:仅转换
4. 打印标准化后的统计信息
print ("\n 标准化后训练集各特征的统计信息:")
将标准化后的训练集转为 DataFrame,方便查看
X_train_scaled_df = pd.DataFrame(X_train_scaled, columns=feature_names)
计算均值和标准差并保留 2 位小数
mean_stats = X_train_scaled_df.mean().round(2)
std_stats = X_train_scaled_df.std().round(2)
合并并打印
stats_df = pd.DataFrame ({"均值": mean_stats, "标准差": std_stats})
print (stats_df)
return X_train_scaled, X_test_scaled, y_train, y_test
执行预处理函数并验证结果
if name == "main":
X_train_scaled, X_test_scaled, y_train, y_test = iris_data_preprocessing ()
if X_train_scaled is not None:
print (f"\n 预处理完成!可直接用于模型训练:")
print (f"标准化训练集形状:{X_train_scaled.shape},训练集标签形状:{y_train.shape}")
print (f"标准化测试集形状:{X_test_scaled.shape},测试集标签形状:{y_test.shape}")
#### 8.2.4 运行验证步骤
1. 安装依赖库:在命令行执行“pip install scikit-learn pandas”;
2. 运行代码,观察控制台输出,确认是否成功加载数据集(原始数据形状应为X=(150,4),y=(150,));
3. 检查数据集划分结果,训练集形状应为X_train=(105,4),测试集X_test=(45,4);
4. 查看标准化后的统计信息,各特征的均值应接近0(如-0.1~0.1之间),标准差应接近1(如0.9~1.1之间);
5. 确认代码无报错,且返回的预处理后数据可直接用于后续模型训练(如逻辑回归、决策树等)。
### 8.3 自动化测试:生成简单接口测试代码
#### 8.3.1 需求描述
生成Python代码,对公开的“JSONPlaceholder”接口(https://jsonplaceholder.typicode.com/posts/1)进行自动化测试。测试内容包括:1. 发送GET请求,检查响应状态码是否为200;2. 检查响应数据格式是否为JSON;3. 验证响应数据中关键字段(如“userId”“id”“title”“body”)是否存在;4. 打印测试结果(通过/失败)和详细日志。
#### 8.3.2 提示词设计
“请生成可直接运行的Python代码,功能如下:
1. 使用requests库发送GET请求到接口:https://jsonplaceholder.typicode.com/posts/1;
2. 设计3个测试用例:
(1)测试用例1:检查响应状态码是否等于200;
(2)测试用例2:检查响应的Content-Type是否包含“application/json”(确认是JSON格式);
(3)测试用例3:检查响应JSON数据中是否包含“userId”“id”“title”“body”4个字段;
3. 对每个测试用例,打印“测试用例X:[通过/失败],原因:XXX”;
4. 统计总测试用例数、通过数和失败数,最后打印测试总结(如“测试完成:共3个用例,通过2个,失败1个”);
5. 处理网络超时、请求失败等异常,异常时标记对应测试用例为失败,并打印异常原因;
6. 代码开头添加依赖安装命令(pip install requests),添加函数注释和测试步骤说明。”
#### 8.3.3 生成的代码示例
```python
# 安装依赖库:pip install requests
import requests
def test_jsonplaceholder_api():
"""
测试JSONPlaceholder接口(GET /posts/1)的可用性和数据正确性
包含3个测试用例,输出详细测试结果和总结
"""
api_url = "https://jsonplaceholder.typicode.com/posts/1"
test_cases = [] # 存储测试用例结果,每个元素为(用例名,是否通过,原因)
print(f"开始测试接口:{api_url}\n")
# 发送请求并获取响应(提前处理请求异常,避免后续用例中断)
try:
response = requests.get(api_url, timeout=10)
response.raise_for_status() # 若状态码非200,抛出HTTPError
print(f"请求接口成功,响应状态码:{response.status_code}\n")
except requests.exceptions.Timeout:
print("请求接口失败:网络超时(超过10秒)\n")
# 所有测试用例均失败
test_cases.append(("检查响应状态码", False, "请求超时,未获取到响应"))
test_cases.append(("检查JSON格式", False, "请求超时,未获取到响应"))
test_cases.append(("检查关键字段", False, "请求超时,未获取到响应"))
response = None # 标记响应为空,避免后续代码报错
except Exception as e:
print(f"请求接口失败:{str(e)}\n")
test_cases.append(("检查响应状态码", False, f"请求失败:{str(e)}"))
test_cases.append(("检查JSON格式", False, f"请求失败:{str(e)}"))
test_cases.append(("检查关键字段", False, f"请求失败:{str(e)}"))
response = None
# 若请求成功,执行3个测试用例
if response is not None:
# 测试用例1:检查响应状态码是否为200
case1_name = "检查响应状态码"
try:
if response.status_code == 200:
test_cases.append((case1_name, True, f"状态码为200,符合预期"))
else:
test_cases.append((case1_name, False, f"状态码为{response.status_code},预期200"))
except Exception as e:
test_cases.append((case1_name, False, f"执行失败:{str(e)}"))
# 测试用例2:检查响应是否为JSON格式
case2_name = "检查JSON格式"
try:
content_type = response.headers.get("Content-Type", "")
if "application/json" in content_type:
# 尝试解析JSON,进一步确认格式正确
response.json()
test_cases.append((case2_name, True, f"Content-Type包含application/json,且可正常解析JSON"))
else:
test_cases.append((case2_name, False, f"Content-Type为{content_type},预期包含application/json"))
except ValueError: # JSON解析失败
test_cases.append((case2_name, False, "Content-Type显示为JSON,但解析失败(格式错误)"))
except Exception as e:
test_cases.append((case2_name, False, f"执行失败:{str(e)}"))
# 测试用例3:检查关键字段是否存在
case3_name = "检查关键字段"
try:
response_data = response.json()
required_fields = ["userId", "id", "title", "body"]
missing_fields = [field for field in required_fields if field not in response_data]
if not missing_fields:
test_cases.append((case3_name, True, f"包含所有关键字段:{required_fields}"))
else:
test_cases.append((case3_name, False, f"缺失关键字段:{missing_fields}"))
except Exception as e:
test_cases.append((case3_name, False, f"执行失败:{str(e)}"))
# 打印所有测试用例结果
print("="*50)
print("测试用例结果详情:")
print("="*50)
for idx, (case_name, passed, reason) in enumerate(test_cases, start=1):
status = "通过" if passed else "失败"
print(f"测试用例{idx}:{case_name} → {status},原因:{reason}")
# 统计并打印测试总结
total = len(test_cases)
passed_count = sum(1 for _, passed, _ in test_cases if passed)
failed_count = total - passed_count
print("\n" + "="*50)
print(f"测试总结:共{total}个用例,通过{passed_count}个,失败{failed_count}个")
print("="*50)
# 执行接口测试
if __name__ == "__main__":
test_jsonplaceholder_api()
8.3.4 运行验证步骤
- 安装依赖库:命令行执行 “pip install requests”;
- 运行代码,观察控制台输出,确认是否成功发送请求(正常情况下请求应成功);
- 检查 3 个测试用例结果:
-
- 测试用例 1:应显示 “通过”,原因 “状态码为 200,符合预期”;
-
- 测试用例 2:应显示 “通过”,原因 “Content-Type 包含 application/json,且可正常解析 JSON”;
-
- 测试用例 3:应显示 “通过”,原因 “包含所有关键字段:['userId', 'id', 'title', 'body']”;
- 测试异常场景:修改接口 URL 为 “https://jsonplaceholder.typicode.com/posts/99999”(不存在的资源),重新运行,确认测试用例 1 会失败(状态码 404),其他用例根据实际响应结果判断;
- 确认测试总结统计正确,日志清晰易懂。
九、常见问题与解决方案
9.1 大模型生成的代码无法运行怎么办?
9.1.1 检查依赖库是否安装
若运行时出现 “ModuleNotFoundError: No module named 'xxx'”,首先检查是否安装了代码中使用的第三方库。解决方案:
- 查看代码开头的注释,找到对应的安装命令(如 “pip install pandas requests”);
- 在命令行执行安装命令,确保安装成功;
- 若安装后仍报错,检查 Python 环境是否正确(如虚拟环境未激活,导致库安装到全局环境)。
9.1.2 排查路径与文件问题
若出现 “FileNotFoundError: [Errno 2] No such file or directory: 'xxx'”,解决方案:
- 确认输入的文件 / 文件夹路径是否正确(绝对路径需包含完整盘符,如 “D:/data.csv”,而非 “data.csv”);
- 检查路径中的特殊字符(如空格、中文)是否导致识别错误,可尝试将文件移到无特殊字符的路径下(如 “D:/test/data.csv”);
- 代码中若使用相对路径,确认代码运行目录与文件所在目录一致(可通过 “print (os.getcwd ())” 查看当前运行目录)。
9.1.3 处理数据格式错误
若出现 “ValueError: could not convert string to float: 'xxx'”(数据类型转换错误),解决方案:
- 检查输入数据的格式,确认是否包含非数值字符(如文本文件中的字母、符号);
- 在提示词中补充 “对输入数据进行合法性校验,如遇到非数值字符需提示用户并跳过”;
- 若代码已生成,手动添加数据校验逻辑(如使用 “try-except” 捕获转换错误)。
9.2 如何让大模型生成更贴合实际需求的代码?
9.2.1 补充业务场景细节
模糊的需求会导致代码通用性强但实用性低。例如,仅说 “生成数据统计代码”,不如补充 “用于电商销售数据统计,需按日期分组计算每日销售额,排除退款订单,结果保存为 Excel 并添加数据透视表”。补充业务细节后,大模型生成的代码会更贴合实际工作流。
9.2.2 明确代码运行环境
不同环境对代码有不同要求。例如,提示词中加入 “代码需运行在 Python 3.7 环境,且只能使用公司内网允许的库(pandas、openpyxl),不能使用 requests 等网络相关库”,大模型会避免使用不兼容的语法或库,减少后续修改成本。
9.2.3 提供示例输入输出
对于复杂需求,提供示例输入输出能让大模型更准确理解逻辑。例如,生成 “用户登录验证代码” 时,提示词可加入 “示例输入:用户名 ='admin',密码 ='123456' → 输出:' 登录成功 ';示例输入:用户名 ='admin',密码 ='wrong' → 输出:' 密码错误 '”,大模型会参考示例逻辑生成代码。
9.3 生成的代码存在安全风险怎么办?
9.3.1 避免直接处理用户输入的危险操作
若代码涉及文件写入、命令执行等操作,大模型可能未考虑安全风险(如用户输入恶意路径导致文件覆盖)。解决方案:
- 提示词中加入 “对用户输入的路径进行校验,禁止输入根目录(如 '/' 或 'C:/')或包含 '../' 的路径(防止路径遍历攻击)”;
- 生成代码后,检查是否有直接使用用户输入执行命令(如 “os.system (user_input)”)的逻辑,替换为安全的方式(如使用 “subprocess.run” 并指定参数列表)。
9.3.2 网络请求需添加安全校验
若代码涉及网络请求,需避免泄露敏感信息。提示词中加入 “API 密钥需从环境变量读取,不能硬编码在代码中;发送 HTTPS 请求时需验证 SSL 证书,禁止跳过证书校验(如 requests 的 verify=False)”,减少密钥泄露和中间人攻击风险。
9.3.3 数据处理需保护隐私
若代码处理用户隐私数据(如手机号、身份证号),提示词中加入 “对输出的隐私数据进行脱敏处理(如手机号显示为 '138****5678',身份证号显示为 '110101********1234')”,避免数据泄露合规风险。

14万+

被折叠的 条评论
为什么被折叠?



