You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python Flask实现URL日期加减及错误处理的开发问题

Flask日期加减运算实现(含错误处理)

以下是实现需求的完整可运行代码,同时针对开发中遇到的问题给出明确解决逻辑:

from flask import Flask, request, jsonify
from datetime import datetime, timedelta

app = Flask(__name__)

@app.route('/calculate-date', methods=['GET'])
def calculate_date():
    try:
        # 提取并解析URL query参数
        date_str = request.args.get('date')
        diff = int(request.args.get('diff'))
        op = request.args.get('op')

        # 将日期字符串转换为可运算的date类型
        target_date = datetime.strptime(date_str, '%Y-%m-%d').date()

        # 根据操作类型执行日期加减
        if op == 'add':
            result_date = target_date + timedelta(days=diff)
        elif op == 'del':
            result_date = target_date - timedelta(days=diff)
        else:
            return jsonify({'error': '操作类型错误,仅支持add/del'}), 400

        return jsonify({'result': result_date.strftime('%Y-%m-%d')})
    
    except ValueError as e:
        # 针对性处理参数格式错误
        if "does not match format" in str(e):
            return jsonify({'error': '日期格式错误,需为YYYY-MM-DD'}), 400
        elif "invalid literal for int()" in str(e):
            return jsonify({'error': 'diff参数必须为整数'}), 400
        else:
            return jsonify({'error': f'参数错误:{str(e)}'}), 400
    except Exception as e:
        # 捕获其他未知异常
        return jsonify({'error': f'服务器错误:{str(e)}'}), 500

if __name__ == '__main__':
    app.run(debug=True)

问题对应解决说明

1. 日期类型转换错误导致计算失效

  • 原问题:未将日期字符串转换为datetime.date类型,直接尝试与timedelta运算,导致类型不兼容。
  • 解决:使用datetime.strptime(date_str, '%Y-%m-%d').date()严格按指定格式将字符串转为date类型,确保可与timedelta执行加减运算。

2. 无法根据op参数区分加减操作

  • 原问题:未对op参数做分支判断,逻辑无法区分加法/减法。
  • 解决:通过if-elif分支匹配op值:add执行日期加天数,del执行日期减天数;同时增加非法op判断,返回明确错误提示。

3. try-except实现错误处理时程序异常

  • 原问题:try块未覆盖全部风险逻辑(如参数解析、类型转换、运算),或异常捕获范围不全,导致未处理的异常抛出。
  • 解决:将参数获取、类型转换、日期运算全部纳入try块,分层次捕获异常:优先捕获ValueError处理参数格式/类型错误,再用Exception兜底捕获未知异常,确保所有异常都能被处理并返回友好提示。

内容的提问来源于stack exchange,提问作者user20030253

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:35:20