类中的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()