我有一个简单的代码,至少需要一个参数。现在我的代码格式如下所示:
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 '语句下?如果是这样,怎么样?谢谢。
答案 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
文档中看到的标准代码。它没有什么问题。