我有这些陈述:
for arg in sys.argv[1:]:
if not "-a" in arg and not "-i" in arg and not "-r" in arg and not "-o" in arg and not "-s" in arg:
print "Error: invalid argument \"" + arg + "\"."
必须有一种方法来压缩这些语句,最终得到更少的代码。任何人都可以帮助我吗?
答案 0 :(得分:2)
试试这个:
valid = {"-a", "-i", "-r", "-o", "-s"} # using a set, for efficiency
for arg in sys.argv[1:]: # loop over args
if not any(v in arg for v in valid): # equivalent to code in question
print 'Error: invalid argument "{}".'.format(arg) # using format string
但实际上,您应该考虑使用专门的解析器来执行命令行参数(例如argparse
):这不够强大并且会给您“误报”和“误报” - 请参阅注释。 / p>
答案 1 :(得分:1)
您可以通过执行以下操作来压缩它们:
if arg not in "-a-i-r-o-s":
print "Error: invalid argument \"{}\".".format(arg)
但我建议您使用argparse模块为您完成所有这些操作。
答案 2 :(得分:0)
您真的要测试(例如)-a
参数中的<{1}},或者-a
是否参数?后者会更常见。你可以这样做:
if arg.startswith("-") and arg[1:2] not in "airos":
print "Error: invalid argument '%s'" % arg[:2]
如果你真的想测试-a
是否在论证中,最简单的方法可能是:
if not any("-" + c in arg for c in "airos"):
print "Error: invalid argument '%s'" % arg