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 に答える