【发布时间】:2021-05-21 18:24:52
【问题描述】:
我用 Python/Flask 构建了一个非常简单的货币转换器。我正在使用一个名为forex-python 的库。一切正常,但是当用户将“金额”留空时应用程序崩溃,并且我收到 Python 错误ValueError: could not convert string to float:
我有try.. except 用于ValueError 和TypeError,但它们不起作用。我猜,当用户将“金额”留空时,它会被视为字符串,python 无法将其转换为float
那么我该如何优雅地处理这个问题呢?我只是想将用户重定向到'/' 并向他们显示一条消息。
代码如下:
@app.route('/results', methods=['POST'])
def process():
conv_from = request.form['conv_from']
conv_to = request.form['conv_to']
amount = float(request.form['amount'])
rates = CurrencyRates()
codes = CurrencyCodes()
try:
results = round(rates.convert(conv_from, conv_to, amount), 2)
symbol = codes.get_symbol(conv_to)
return render_template("/results.html", conv_from=conv_from, conv_to=conv_to, amount=amount, results=results, symbol=symbol)
except RatesNotAvailableError:
flash("Please enter a valid currency")
return redirect('/')
except (ValueError, TypeError):
flash("Oops something went wrong")
return redirect('/')
【问题讨论】:
-
您可以改用
amount = request.form.get('amount', type=float),它不会引发异常,但如果它不存在,它将返回None。然后你可以像if amount is None: ....这样检查