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

类中的Python命令行参数不起作用,python,command-line,Python,Command Line,我通过命令行接受两个字符串word1和word2,该命令行只应包含字母 check_conditions功能将确保字符串仅用于字母表 当我以python myprogram.py'word1'word2'的形式运行这个程序时,它没有显示任何内容,没有错误,没有输出 当我在不使用类的情况下运行这个程序时,它可以正常工作 class FindWinner: def __init__(self, word1, word2): self.word1 = word1

我通过命令行接受两个字符串
word1
word2
,该命令行只应包含字母

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()

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

如果特殊字符交叉点(self.word1)或特殊字符交叉点(self.word1)或(len(self.word1)!=len(self.word2)
或在self.word1中使用('no')或在self.word2中使用('no'):


当我运行python
myprogram.py my_string my_long_string
时,它会给出
字符串有效的输出(else部分)。根据上述条件,两个字符串不应包含任何特殊字符&len应相同。

您应该从代码中调用main函数,因为您只定义了它,而没有调用它。通常的方法是在代码底部添加以下行

if __name__ == '__main__':
    main()

为了解释@sdvd的答案,以下几行

if __name__ == “__main__”:
    main()
检查脚本是由解释器直接调用还是导入。如果正在导入脚本,则不会运行主函数,因为您可能不想立即运行脚本。如果解释器直接调用脚本,则需要立即运行main函数,这是当表达式的计算结果为true时发生的情况

在现在的脚本中,没有对主函数的调用,因此不会发生任何事情。将以上几行添加到脚本的底部,事情应该按照您希望的方式进行


要访问参数,请使用
args.word1
args.word2
而不是
args.number1
args.number2
,因为这是您命名它们的名称

将参数命名为一个名称,稍后再使用另一个名称


尝试使用
args.word1
args.word2
,或者在添加它们时调用它们
number1
number2
(使用
add\u参数

您在任何地方呼叫
main()
吗?谢谢。成功了。现在,我得到了另一个错误AttributeError:“Namespace”对象没有属性“number1”,而不是“number1”,并且“number2”使用我错过的“word1”和“word2”进行重命名。非常感谢你。当我运行python myprogram.py my_string my_long_string时,它会告诉我string是有效的输出(else部分)。根据上述条件,两个字符串不应包含任何特殊字符,而len应相同。感谢您的输入。我已经按照sdvd的建议编辑了这个程序。我没有使用ArgParser的经验,但是快速浏览一下文档就会发现您有名为
word1
word2
的参数。我相信您可以这样访问它们:
args.word1
args.word2
。我编辑了我的答案以反映这一点。
if __name__ == “__main__”:
    main()