我有这些陈述:
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 + "\"."
必须有一种方法来压缩这些语句以减少代码。谁能帮我?
我有这些陈述:
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 + "\"."
必须有一种方法来压缩这些语句以减少代码。谁能帮我?
尝试这个:
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
:这不够健壮,会给您“误报”和“误报” - 请参阅评论。
您可以通过以下方式压缩它们:
if arg not in "-a-i-r-o-s":
print "Error: invalid argument \"{}\".".format(arg)
但我建议使用argparse模块为您完成所有这些工作。
你真的想测试(例如)-a
是否在论点中,或者是否-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