我正在尝试编写一个简单的守护程序,该守护程序从调用方接收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
有人可以帮助我了解问题所在吗?
谢谢大家!
答案 0 :(得分:2)
根据this link,add_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个参数-
因此,为了修复以上代码,我们需要添加以下几行-
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)