0

我有这些陈述:

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 + "\"."

必须有一种方法来压缩这些语句以减少代码。谁能帮我?

4

3 回答 3

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:这不够健壮,会给您“误报”和“误报” - 请参阅评论。

于 2013-09-25T03:17:41.653 回答
1

您可以通过以下方式压缩它们:

if arg not in "-a-i-r-o-s":
    print "Error: invalid argument \"{}\".".format(arg)

但我建议使用argparse模块为您完成所有这些工作。

于 2013-09-25T03:19:31.407 回答
0

你真的想测试(例如)-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
于 2013-09-25T03:20:45.560 回答