我试图防止这种简单的排序程序在反向打印时仅接受1个参数。这是我输入的内容,仍然可以通过:
python sort.py alpha -r
这是我的整个程序:
示例:python sort.py能够启用Spencer增量 扭转: python sort.py -rable spencer delta python sort.py-可逆spencer delta
import argparse
import sys
def wordsorter():
argparser = argparse.ArgumentParser()
argparser.add_argument('user_string', nargs='*')
argparser.add_argument("-r","--
reverse",action="store_true",default="False",dest="z_to_a")
args = argparser.parse_args()
if (len(sys.argv)==1 or len(sys.argv)==2):
print("Invalid command line arguments to program. Please, supply two or more strings to sort.")
sys.exit(1)
if args.z_to_a == True and len(sys.argv)>1:
words_to_sort= sorted(args.user_string, reverse = True)
print(*words_to_sort)
print("if 1")
else:
words_to_sort = sorted(args.user_string)
print(*words_to_sort)
print("if 2")
if __name__ == '__main__':
wordsorter ()
当我输入一个参数而不进行反向排序时,它可以工作 如果我尝试对一个参数使用反向,则它不起作用。 我在做什么错了?
答案 0 :(得分:1)
您的问题是由以下事实引起的:您告诉argparse期望user_string
的任意数量的参数,而不是至少两个,然后检查len(sys.argv) >= 2
(顺便说一句,这样更好的方式写成条件),但如果您传递-r
且user_string
仅一个参数,则可以等于2。
您可以检查len(args.user_string) >= 2
并且应该可以使用。
如果您想通过argparse做到这一点:不幸的是,虽然可以告诉它至少期望一个参数,但无法直接告诉它至少期望两个。 this答案中描述了一种可能的解决方法。