基于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
相关产品推荐
相关产品推荐

