首页 > 解决方案 > 在 Python 中处理可选参数

问题描述

我正在尝试解决与我的 api 相关的问题并想重构我的代码以向后工作,我的意思是如果前端没有向我发送我想要的数据,则请求应该通过,如果前端 - end 确实发送,它仍然会照常工作。

所以大致我的创建功能工作正常但是,当前端团队发送的数据没有服务器预期它确实会因 500 内部服务器错误而中断,但我想让它成为可选的,即使没有发送预期的数据,我想要要获得 200 Http 响应,这里是代码中断的地方,因为 job_invoice 上的关键错误。我尝试在我的 for 循环中使用 break 来绕过它.. 但仍然。

job_invoice_data = inv_data['job_invoice']
    job_invoice = JobInvoice.objects.create(job=job_instance,   **job_invoice_data)
    obj.job_invoice = job_invoice

    # Create an InvoiceLineItem for each element in invoice_line_item

    for invoice_line_item in inv_data['invoice_line_item']:
        invoice_line_item['job_invoice'] = job_invoice.id
        if invoice_line_item['job_invoice'] is None:
            break
        invoice_line_item_serializer = InvoiceLineItemSerializer(data=invoice_line_item)
        if invoice_line_item_serializer.is_valid():
            invoice_line_item_obj = invoice_line_item_serializer.save()
        else:
            logger.debug("Couldn't create invoice line item: {}".format(invoice_line_item))

标签: pythondjangorest

解决方案


简单的解决方案:使用 Try 和 Catch 块

try:
    #Parse all parameters here
except:
    pass

更复杂:

检查参数的可用性并仅在可用时继续,但使用默认值 none。

例如,在 Flask 中,您可以执行以下操作:

@app.route("/func/<required_param>", defaults={"opt1": None, "opt2": None,"opt3": None}) 

推荐阅读