Python调用营收报表自定义函数写入txt文件内容为None原因求解
营收报告写入文件得到None的问题原因及解决方案
核心原因
- Python的函数默认规则:如果没有显式写
return语句指定返回内容,函数执行结束后默认返回None。你写的第一个revenue_report函数只有print语句,没有做返回值的定义,所以调用这个函数拿到的结果就是None,你把None转成字符串写入文件,自然只得到None内容。 - 你混淆了
print的作用和函数返回值的作用:print只是把内容输出到终端控制台,打印完内容就消失了,不会把打印的内容保存下来传给调用方,你之前的写法相当于想把屏幕上打印的内容直接存进文件,但代码逻辑里根本没做把内容拼接保存的操作。
整改方案
首先修改第一个文件Task63a.py,让revenue_report函数支持接收文件名参数,先把报表内容拼接成完整字符串,再写入指定文件:
def revenue_report(filename): # 获取三个月营收数据 revenue1 = float(input("Enter revenue for month 1: ")) revenue2 = float(input("Enter revenue for month 2: ")) revenue3 = float(input("Enter revenue for month 3: ")) sum2 = revenue1 + revenue2 sum3 = revenue1 + revenue2 + revenue3 # 拼接完整的报表内容,不要直接print report_content = f''' Revenue Report -------------------------- Revenue for 1: $ {revenue1:,.2f} | Cumm. Total: $ {revenue1:,.2f} Revenue for 2: $ {revenue2:,.2f} | Cumm. Total: $ {sum2:,.2f} Revenue for 3: $ {revenue3:,.2f} | Cumm. Total: $ {sum3:,.2f} The company has made a total of ${sum3:,} in revenue in the past quarter. ''' # 将内容写入传入的指定文件 with open(filename, "w", encoding="utf-8") as f: f.write(report_content) # 如果需要同时在控制台显示报表可以加这行 print(report_content)
再修改第二个文件的代码,直接调用函数传入文件名即可:
import Task63a # 传入要保存的文件名,执行后报表就会写入该文件 Task63a.revenue_report("revenue_report.txt")
内容的提问来源于stack exchange,提问作者cat9854
相关产品推荐
相关产品推荐

