Streamlit网页应用自定义函数计算结果无法显示解决方法
问题根因
你的代码无法展示计算结果,是两个基础逻辑/语法错误导致的:
st.write输出语句写在了return关键字后面,Python函数执行到return就会立刻终止,后面的代码永远不会运行- 你只定义了
idealbudget计算函数,从未主动调用这个函数,计算逻辑根本不会触发
额外说明:你现在把第二个表单写在第一个表单的提交判断分支里属于嵌套表单,是Streamlit明确不支持的写法,很容易出现提交后输入值清空、页面重跑异常,要么把两个输入合并到同一个表单,要么用会话状态存第一步的输入值,不要写嵌套表单。
修正方案
方案1:单表单(最稳定,推荐新手用)
把两个输入项放到同一个表单里,不需要处理复杂的页面状态,代码最少:
import streamlit as st st.write("### 日常餐饮预算计算") with st.form(key="budget_form"): st.write("2. How often do you eat out?") days_input = st.text_input("Please enter average number of days") st.write("3. What is your monthly income?") income_input = st.text_input("Please enter monthly income") submit_btn = st.form_submit_button("Show Result") if submit_btn: # 加简单的输入校验,避免用户输非数字直接报错 try: days = float(days_input) income = float(income_input) if days <= 0: st.error("天数必须大于0") else: daily_budget = income / days st.write(f"Result is {round(daily_budget, 2)}") except ValueError: st.error("请在输入框填写有效数字,不要输入文字、特殊符号")
方案2:分步提交(匹配你原本的交互逻辑)
如果一定要做两步提交的效果,用st.session_state存第一步提交的天数,不要嵌套表单:
import streamlit as st # 初始化会话状态存储第一步输入的天数 if "submitted_days" not in st.session_state: st.session_state.submitted_days = None # 第一步:输入天数 st.write("2. How often do you eat out?") form04 = st.form(key="form04") days = form04.text_input("Please enter average number of days") submit04 = form04.form_submit_button("Submit") if submit04: st.session_state.submitted_days = days # 第一步提交完成后才显示第二步输入收入的表单 if st.session_state.submitted_days is not None: st.write("3. What is your monthly income?") form05 = st.form(key="form05") income = form05.text_input("Please enter monthly income") submit05 = form05.form_submit_button("Submit") if submit05: try: budget = float(income) / float(st.session_state.submitted_days) st.write(f"Result is {round(budget, 2)}") except ValueError: st.error("请输入有效数字") except ZeroDivisionError: st.error("天数不能为0")
内容的提问来源于stack exchange,提问作者Sarah Berment
相关产品推荐
相关产品推荐

