参数检查最佳实践

时间:2016-02-26 03:32:32

标签: python

我有一个简单的代码,至少需要一个参数。现在我的代码格式如下所示:

import modules 

# argparse stuff
parser = argparse.ArgumentParser()
parser.add_argument(-m)
parser.add_argument(-u)
args = parser.parse_args()

# check the number of arguments 
if len(sys.argv) > 3:
sys.exit()

if len(sys.argv) == 1:
sys.exit()

class Program:
      def A():
      def B():
      def C():

if __name__ == '__main__':
    try:
       Program()

代码按预期工作,但我想知道如何将代码重写为'pythonic'。我是否将参数检查置于'if name '语句下?如果是这样,怎么样?谢谢。

2 个答案:

答案 0 :(得分:1)

我建议不要查看sys.argv,特别是如果您已经使用了CLI解析库。

Argprase有很多方法可以强制执行要求,但如果这些方法都不符合您的需求,那么您可以查看您的需求' args'对象

就个人而言,我建议不要在该文件的全局范围内运行parse_args()等函数。相反,我建议(至少)只包含你在一个名为main的函数中得到的东西,然后调用' main()'在&_ 39; if __name__ ==' __ main __'

之后

Argparse示例:

如果' -m'和' -u'互相排斥

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-m')
group.add_argument('-u')

args = parser.parse_args()  # will output a error message if '-m' or '-u' isn't supplied

如果需要特定的arg

parser = argparse.ArgumentParser()
parser.add_argument('-m', required=True)   # must always give '-m'

或者只是看看' args'对象

parser = argparse.ArgumentParser()
parser.add_argument('-m')
parser.add_argument('-u')

args = parser.parse_args()
if not (args.m or args.u):
    sys.exit(1) # should exit non-zero on failures

主要包装示例:

import modules

class Program:
      def A():
      def B():
      def C():

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument(-m)
    parser.add_argument(-u)
    args = parser.parse_args()

    if not (args.m or args.u):
        sys.exit(1)

    try:
       Program()
    except SomeException:
        # handle it
        pass # b/c I don't know what you need here

if __name__ == '__main__':
    main()

答案 1 :(得分:0)

检查argparse之后的参数数量没有多大意义。如果出现一些错误,argparse会处理错误,因此您无需复制它。

请在if __name__检查后检查参数 - 以防万一您想要导入模块而不执行。

否则,它只是您在argparse文档中看到的标准代码。它没有什么问题。