Python程序中rand_nums()函数返回None的问题排查求助
问题分析与修复方案
1. rand_nums()返回None的核心原因
你在rand_nums()里把print()的结果赋值给了final,但**print()函数本身的返回值就是None**,所以函数最后return的自然是None,导致写入文件时出现"None"。
2. 代码中的其他问题
- 文件写入的内容没有分隔符,众数字符串会直接拼接在一起,可读性极差
- 使用全局列表存储随机数,代码耦合性高
statistics.mode()在列表中所有元素出现次数相同时会抛出StatisticsError(比如生成5个不重复的数时)
修复后的代码
import statistics as stat import random def mean(list_x): '''计算列表平均值''' total = 0.0 for i in list_x: total += i return total / len(list_x) def generate_random_numbers(): # 用局部列表存储,避免全局变量 list_1 = [] list_2 = [] list_3 = [] list_4 = [] list_5 = [] print("Column 1 Column 2 Column 3 Column 4 Column 5") # 准备要写入文件的随机数字符串 file_content = "" for _ in range(5): num1 = random.randint(1, 1000) list_1.append(num1) num2 = random.randint(1, 10000) list_2.append(num2) num3 = random.randint(200, 5000) list_3.append(num3) num4 = random.randint(1, 200) list_4.append(num4) num5 = random.randint(100, 2000) list_5.append(num5) # 格式化打印内容 line = f"{num1}\t{num2}\t\t{num3}\t\t\t{num4}\t\t\t\t{num5}\n" print(line.strip()) # 把行内容加入到要写入文件的字符串中 file_content += line # 返回要写入的内容和各个列表,方便后续计算众数 return file_content, list_1, list_2, list_3, list_4, list_5 # 使用with语句自动管理文件,避免忘记关闭 with open("genericFile/storage.txt", "w") as f: rand_content, l1, l2, l3, l4, l5 = generate_random_numbers() # 写入随机数内容 f.write(rand_content) f.write("\n--- 各列众数 ---\n") # 处理众数可能不存在的情况 def safe_mode(lst): try: return str(stat.mode(lst)) except stat.StatisticsError: return "无唯一众数" # 写入各列众数,带说明 f.write(f"列1众数: {safe_mode(l1)}\n") f.write(f"列2众数: {safe_mode(l2)}\n") f.write(f"列3众数: {safe_mode(l3)}\n") f.write(f"列4众数: {safe_mode(l4)}\n") f.write(f"列5众数: {safe_mode(l5)}\n")
关键修复点说明
- 取消
print()的赋值操作,改用字符串拼接生成要写入文件的内容,函数返回实际需要写入的文本和各个列表 - 使用
with语句操作文件,自动关闭文件,避免资源泄漏 - 添加
safe_mode函数处理无唯一众数的异常情况 - 用局部列表替代全局列表,降低代码耦合
- 写入文件时添加分隔符和说明文字,提升可读性
内容的提问来源于stack exchange,提问作者SaviorTech
相关产品推荐
相关产品推荐

