CS50 Finance Sell模块测试报错,Flask运行正常求助
CS50 Finance Sell模块测试全部报"can't check until a frown turns upside down"错误的修复方案
前端页面(sell.html)问题修复
- 下拉选择框未添加
required属性,测试无法识别其为必填项:
原代码:
修改为:<select name="symbol"><select name="symbol" required> - 股票数量输入框未添加
required和min="1"属性,不符合测试对必填正整数输入的校验要求:
原代码:
修改为:<input autocomplete="off" autofocus class="form-control mx-auto w-auto" name="shares" placeholder="Shares" type="number"><input autocomplete="off" autofocus class="form-control mx-auto w-auto" name="shares" placeholder="Shares" type="number" required min="1"> - 给
option标签显式设置value属性(测试可能严格要求表单提交值与选项文本一致):
原代码:
修改为:<option>{{ symbol["symbol"] }}</option><option value="{{ symbol["symbol"] }}">{{ symbol["symbol"] }}</option>
后端逻辑问题修复
- 持仓量计算逻辑错误:原SQL直接取单条交易的
shares值,无法正确计算用户当前总持仓量,需用SUM(shares)统计:
原代码:
修改为:owned_shares = db.execute("SELECT shares FROM transactions WHERE user_id = ? AND symbol = ? GROUP BY symbol", user_id, symbol)[0]["shares"]result = db.execute("SELECT SUM(shares) AS total_shares FROM transactions WHERE user_id = ? AND symbol = ?", user_id, symbol) owned_shares = result[0]["total_shares"] if result[0]["total_shares"] else 0 - 未处理无效股票代码的异常:当
lookup(symbol)返回None时,直接取["price"]会抛出异常,需先校验:
原代码:
修改为:price_ = lookup(symbol)["price"]stock_data = lookup(symbol) if not stock_data: return apology("Invalid stock symbol") price_ = stock_data["price"] - 无持仓时的页面提示:当用户没有任何持仓时,下拉框为空会导致测试失败,需在模板中添加状态提示:
在sell.html的form前添加:{% if not symbols %} <p>You don't own any stocks to sell.</p> {% else %} <!-- 原form代码 --> {% endif %}
额外检查项
- 确保
apology函数返回符合CS50要求的响应(如400状态码、包含错误文本的页面),测试依赖此判断错误处理是否有效。 - 确认
transactions表字段类型正确:shares为整数类型,price为数值类型,避免计算时出现类型错误。
内容的提问来源于stack exchange,提问作者Enx777
相关产品推荐
相关产品推荐

