簡體   English   中英

類中的Python命令行參數不起作用

[英]Python command line arguments in class not working

我通過命令行接受兩個字符串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輸出(其他部分)。 根據上述條件,兩個字符串均不應包含任何特殊字符,並且len應該相同。

您應該從代碼中調用main函數,因為您只定義了main函數而沒有調用它。 通過在代碼底部添加以下行來完成此操作的常用方法。

if __name__ == '__main__':
    main()

為了闡明@sdvd的答案,這些行

if __name__ == “__main__”:
    main()

檢查腳本是由解釋程序直接調用還是被導入。 如果正在導入腳本,則不會運行main函數,因為您可能不想立即運行該腳本。 如果腳本是由解釋器直接調用的,則要立即運行main函數,這是在該表達式的值為true時發生的情況。

現在,在您的腳本中,沒有對main函數的調用,因此什么也沒有發生。 將以上各行添加到腳本的底部,一切應該按照您希望的順序進行。

要訪問您的參數,請使用args.word1args.word2而不是args.number1args.number2因為這是您為它們命名的名稱。

您將參數命名為一件事,以后再使用另一名稱。

嘗試使用args.word1args.word2 ,或者在添加它們時使用number1number2 (使用add_argument )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM