向Python argparse库提供默认整数值

时间:2019-06-02 11:26:27

标签: python python-3.x arguments argparse

我正在尝试编写一个简单的守护程序,该守护程序从调用方接收2个输入整数值(使用Python 3.6)。

如果未指定值,我希望argparse选择默认的整数值。

这是我的代码:

import argparse    
def main():
    parser = argparse.ArgumentParser(description=help_text)
    parser.add_argument('daily_budget', help="Daily budget", type=int, default=10000)
    parser.add_argument('daily_watermark', help="Daily minimum budget to start running",
                    type=int, default=10001)
arguments = parser.parse_args()

if __name__ == "__main__":
    main()

没有输入参数的情况下运行此代码时,出现以下错误-

error: the following arguments are required:daily_budget, daily_watermark

有人可以帮助我了解问题所在吗?

谢谢大家!

2 个答案:

答案 0 :(得分:2)

根据this linkadd_argument的语法为:

  

ArgumentParser.add_argument(名称或标志... [,操作] [,nargs] [,const] [,默认] [,类型] [,选择] [,必需] [,帮助] [,metavar] [ ,dest])

在以上语法中,您具有[required]参数,

  

必填-命令行选项是否可以省略(仅可选)。

因此,您要做的就是向required=False添加一个add_argument参数:

parser.add_argument('daily_budget', help="Daily budget", type=int, default=10000, required=False)

与其他指令相同。

答案 1 :(得分:1)

上面的示例中缺少2个参数-

  1. 在上述语法中,我们缺少@bogdan Doicin提到的[required]参数
  2. 我的原始参数是位置参数(名称前面没有-选项)。始终需要位置参数!

因此,为了修复以上代码,我们需要添加以下几行-

class RetractBidAPIView(ListCreateAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = RetractBidSerializer
    queryset = ''

    def create(self, request, pk, *args, **kwargs):
        auction = get_object_or_404(Auction, pk=pk)
        date_now = datetime.now(timezone.utc)
        serializer = self.get_serializer(data=request.data,
                                      context={"request": request})

        serializer.is_valid(raise_exception=True)
        serializer.save(buyer=request.user, auction=auction)

        bid = get_object_or_404(Bid, pk=current_bid.pk)
        bid.delete()
        return Response(serializer.data, {"detail": "You bid is retracted"}, status=status.HTTP_200_OK)