我刚刚开始学习aws lambda函数,并编写了一个从dynamodb表中获取一些数据的函数。 这就是功能:
import boto3
from boto3.dynamodb.conditions import Key, Attr
import botocore.exceptions
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
dynamodb=boto3.resource('dynamodb')
appointmentsTable = dynamodb.Table('Appointments')
class NotFoundError(Exception):
pass
def lambda_handler(event, context):
try:
logger.info(f'event: {event}')
bookedAppointments = fetchAppointments(event)
logger.info(f'Response: {bookedAppointments}')
return sendResponse(True , 200 , 'Appointments found' , bookedAppointments)
except NotFoundError:
return sendResponse(True , 400, 'No booked appointments Found' , [])
except Exception as error:
return sendResponse(False , 500 , 'Error in fetch booked appointments' , str(error))
def sendResponse(success , statusCode , message , responseData):
return {
'success' : success,
'statusCode' : statusCode,
'message': message,
'responseData' : responseData
}
def fetchAppointments(event):
consId = event.get('consId')
try:
bookedAppointments = appointmentsTable.query(
IndexName = 'consId-index',
KeyConditionExpression = Key('consId').eq(consId),
FilterExpression = 'booked=:b',
ExpressionAttributeValues = {
':b' : True
}
)
except botocore.exceptions.ClientError as error:
logger.exception(f'Error in fetchAppointments function: {error}')
raise error
if bookedAppointments.get('Items') == []:
raise NotFoundError
sortedResult = sortResult(bookedAppointments.get('Items'))
return sortedResult
def sortResult(listTobeSorted):
return sorted(listTobeSorted , key=lambda k: (k['appointmentDate'] , k['appointmentSlot']))
我知道将所有代码逻辑包装在try-catch块中是不好的做法,那么有没有更好的方法来处理fetchAppointment函数中可能出现的任何异常
解决这样的问题有不同的方法,但基本事实是:这总是取决于你想做什么。因此,下面的建议可能适用于这个特定的情况,但可能不适用于其他使用情况。因此,采取以下与盐粒
也就是说,首先要分析的是
fetchAppointments()
函数的不同输出:接下来是您的问题:您应该为此使用异常处理吗?是的,但我不会像你那样频繁地使用它
在这种情况下,我只会将其用于“适当”的异常,其余部分应该由“正常”应用程序逻辑覆盖
考虑处理程序的以下简化版本:
正如您所看到的,只有“真正的”应用程序异常通过异常处理来处理,其余的只是使用“正常”逻辑来判断是否有约会
代码质量当然是一件好事,我们不必从头开始,依我的经验,我学到的是
它应该先起作用,然后看起来漂亮
但在云计算中,还有更多的内容,它还应该在成本方面进行优化
因此,通过处理异常,您已经在正确的路径上开始了
如果不处理异常并让函数失败,默认情况下,lambda将尝试执行它3次
所以你会被指控执行死刑。您可以自定义this behaviour
就处理异常而言,@Jens解释得非常好
相关问题 更多 >
编程相关推荐