簡體   English   中英

Python NameError:名稱“ encrypt”未定義

[英]Python NameError: name 'encrypt' is not defined

當我嘗試運行此命令時,它說NameError:未定義名稱“ encrypt”。

MAX_KEY_SIZE = 26
def getMode():
    while True:
           print('Do you wish to encrypt or decrypt a message?')
           mode = input().lower()
           if mode in "encrypt" 'e' 'decrypt' 'd'.split():
                return mode
           else:
                 print('Enter either "encrypt" or "e" or "decrypt" or "d".')

據我對您的代碼的了解,“加密”是一個字符串值。 您需要使用所需的字符串值創建一個列表,並檢查mode變量是否與該列表中的值匹配。

MAX_KEY_SIZE=26
def getMode():
    while True:
        mode=input().lower()
        if mode in ['encrypt','e','decrypt','d']:
            return mode
        else:
            print('Enter either "encrypt" or "e" or "decrypt" or "d".')

如果要使用.split()方法,可以執行以下操作:

if mode in "encrypt e decrypt d".split()

知道了! input試圖評估您的輸入(因此,它的名稱被誤導了)。 使用raw_input以字符串格式捕獲用戶的願望。

基本上, input所做的是將raw_input傳遞給eval :現在您正在嘗試將字符串“ encrypt”評估為Python代碼,因此它的作用與將“ encrypt”寫入文件相同。 自然會導致錯誤,因為沒有在任何地方引入這樣的變量。 evalinput都是非常危險的事情,因此請不要使用它們,很少有真正的用例。

有關此站點周圍差異的更多信息: https : //stackoverflow.com/a/15129556/308668

MAX_KEY_SIZE = 26
def getMode(): 
    while True:
        print ('Do you wish to encrypt or decrypt a message?') 
        mode = input().lower()
        if mode in "encrypt" 'e' 'decrypt' 'd'.split():
            return mode 
        else: 
            print('Enter either "encrypt" or "e" or "decrypt" or "d".')

希望這是您的代碼。如果是,那么它應該不會出現任何錯誤,而且您嘗試獲得結果的方法也可能無法解決您的目的,因為"encrypt" 'e' 'decrypt' 'd'.split()將為您提供['encryptedecryptd']並且您無法通過嘗試的“ in”方法搜索模式。 您可以搜索以下模式: if any(mode in s for s in "encrypt" 'e' 'decrypt' 'd'.split()): or you can store “加密”'e''解密''d'在列表中,然后使用“輸入”方法來匹配用戶的輸入。

希望能幫助到你..

擴展pogo的答案 ,這是正確的...

使我(並且顯然還有許多其他人)感到驚訝的是, if mode in ...:行中的if mode in ...:的字符串簇不是語法錯誤。

if mode in "encrypt" 'e' 'decrypt' 'd'.split():

這些字符串都是編譯時常量,因此字符串文字串聯將它們在執行開始之前粘合為一個字符串:

>>> "encrypt" 'e' 'decrypt' 'd'
'encryptedecryptd'

然后在該字符串上調用split()方法,該字符串偶然不包含任何空格。 返回值是一個包含單個字符串的列表:

>>> "encrypt" 'e' 'decrypt' 'd'.split()
['encryptedecryptd']

in運算符不會抱怨給定一個字符串( mode )和一個字符串列表,但是它將為mode每個值返回False ,除了一個...沒有人可能鍵入:

>>> 'encrypt' in ['encryptedecryptd']
False
>>> 'encryptedecryptd' in ['encryptedecryptd']
True

暫無
暫無

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

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