面试题答案
一键面试1. 健壮性设计思路
- 用户输入异常处理:在接收用户输入后,首先对输入数据进行合法性验证。例如,对于数字类型的输入,检查是否为有效数字;对于必填字段,检查是否为空。如果输入不合法,捕获异常并给出相应提示。
- API调用失败处理:在调用外部API时,由于网络问题、API服务端故障等原因可能导致调用失败。需要捕获可能出现的异常(如网络异常、API返回错误状态码等),并进行适当处理。
2. 异常分类处理
- 输入验证异常:这类异常是由于用户输入不符合要求导致的。通常返回给用户友好的提示信息,告知输入的错误之处,如“请输入有效的数字”或“该字段不能为空”。
- API调用异常:细分网络异常(如连接超时、DNS解析失败等)和API服务端异常(如返回404、500等错误状态码)。对于网络异常,可以提示用户检查网络连接;对于API服务端异常,可以告知用户服务暂时不可用,请稍后重试。
3. 核心代码片段
假设我们有一个视图函数,接收用户输入并调用外部API:
import requests
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def process_user_input(request):
if request.method == 'POST':
try:
# 获取用户输入数据
user_input = request.POST.get('input_field')
if not user_input:
raise ValueError('输入字段不能为空')
# 假设这里需要将输入转换为整数
input_number = int(user_input)
# 调用外部API
api_url = 'https://example.com/api'
response = requests.get(api_url, params={'number': input_number})
response.raise_for_status() # 检查API返回状态码,如果是4xx或5xx,抛出异常
api_data = response.json()
# 继续后续业务逻辑处理
result = api_data.get('result')
return JsonResponse({'status': 'success', 'result': result})
except ValueError as ve:
# 处理用户输入异常
return JsonResponse({'status': 'error', 'message': str(ve)}, status = 400)
except requests.RequestException as re:
# 处理API调用网络异常
return JsonResponse({'status': 'error', 'message': '网络连接问题,请检查网络'}, status = 503)
except Exception as e:
# 捕获其他未知异常
return JsonResponse({'status': 'error', 'message': '系统出现异常,请稍后重试'}, status = 500)
else:
return JsonResponse({'status': 'error', 'message': '仅支持POST请求'}, status = 405)
上述代码首先检查用户输入是否为空并尝试将其转换为整数,如果失败则捕获ValueError
异常。在调用外部API时,使用requests
库并通过raise_for_status()
方法检查API返回状态码,如果状态码表示错误则抛出异常。不同类型的异常被分类捕获并返回给用户合适的反馈信息。