2016-02-26 71 views
0

我有一个简单的代码,需要至少1个参数。现在,我的代码格式看起来是这样的:参数检查最佳实践

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() 

的代码按预期工作,但我想知道我怎么可以重写我的代码是“Python化”。我是否在“如果名称”声明下放置了参数检查?如果是这样,怎么样?谢谢。

回答

1

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

Argprase有一堆强制执行要求的方法,但如果这些方法都不符合您的需求,则可以查看您的“参数”对象。

就个人而言,我建议不要在该文件的全局范围内运行函数,如parse_args()。相反,我会建议(至少),只是你包裹在一个名为主要功能已经得到了什么,然后调用“main()的”后“如果__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() 
+0

正是我所需要的信息。谢谢! – gratchie

0

检查​​后的参数个数没有多大意义。如果出现错误,​​将处理该错误,因此您不必复制它。

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

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