类中的Python命令行参数不起作用

时间:2017-09-30 16:52:29

标签: python command-line

我接受两个字符串word1word2,通过命令行只包含字母。

check_conditions函数将确保字符串仅用于字母。

当我以python myprogram.py 'word1' 'word2'运行此程序时,它不显示任何内容,没有错误,没有输出。

当我在不使用课程的情况下运行此程序时,它可以作为例外工作。

 class FindWinner:
    def __init__(self, word1, word2):
        self.word1 = word1
        self.word2 = word2

def check_conditions(self):
    special_chars = set('[~!@#$%^&*.-()_+{}":;01234567989\']+$')
    if special_chars.intersection(self.word1) or special_chars.intersection(self.word1) or (len(self.word1) != len(self.word2) 
or ('no' in self.word1) or ('no' in self.word2)):
        print('Invalid string.')
    else:
        print("String is valid")
        print(list(self.word1))
        print(list(self.word2))


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("word1", help="First word")
    parser.add_argument("word2", help="Second word")
    args = parser.parse_args()

    c1 = FindWinner(args.number1, args.number2)
    c1.check_conditions()

我在这里缺少什么?

修改的 我错过了致电main()

if __name__ == "__main__":
    main()

现在,我收到了另一个错误:

if special_chars.intersection(self.word1) or special_chars.intersection(self.word1) or (len(self.word1) != len(self.word2) or ('no' in self.word1) or ('no' in self.word2)):

当我运行python myprogram.py my_string my_long_string时,它会给我string is valid输出(否则为part)。根据上述条件,两个字符串不应包含任何特殊字符和字符串。 len应该是相同的。

3 个答案:

答案 0 :(得分:3)

您应该从代码中调用main函数,因为您只定义了它而不是它。通过在代码底部添加以下行来完成此操作的常用方法。

if __name__ == '__main__':
    main()

答案 1 :(得分:0)

要解释@ sdvd的答案,行

if __name__ == “__main__”:
    main()

检查解释器是直接调用脚本还是导入脚本。如果正在导入脚本,则不会运行main函数,因为您可能不希望立即运行该脚本。如果解释器直接调用脚本,则需要立即运行main函数,即当该表达式求值为true时会发生这种情况。

现在在你的脚本中,没有调用main函数,所以没有任何反应。将上面的行添加到脚本的底部,事情应该按照您的需要进行。

要访问您的参数,请使用args.word1args.word2代替args.number1args.number2,因为这就是您为其命名的内容。

答案 2 :(得分:0)

您将参数命名为一件事,稍后再使用其他名称。

尝试使用args.word1args.word2,或在添加时number1number2调用它们(使用add_argument)。