NameError:name' [string]'未定义

时间:2016-08-09 18:01:04

标签: python

在测试我的程序时,我不断收到此错误:

1. Encrypt a file
2. Decrypt a file
----> 1
Enter the filename you'd like to encrypt: test
Traceback (most recent call last):
  File "./encrypt.py", line 71, in <module>
    Main()
  File "./encrypt.py", line 58, in Main
    filename = input("Enter the filename you'd like to encrypt: ")
  File "<string>", line 1, in <module>
NameError: name 'test' is not defined

这是我的Main()函数的代码:

def Main():
        print("1. Encrypt a file")
        print("2. Decrypt a file")
        choice = str(input("----> "))
        if choice == '1':
                filename = input("Enter the filename you'd like to encrypt: ")
                password = input("Enter a password used for the encryption tool: ")
                encrypt(getKey(password), filename)
                print("File has been encrypted.")
        elif choice == '2':
                filename = input("Enter the filename you'd like to decrypt: ")
                password = input("Enter the password used for the encryption of this file: ")
                decrypt(getKey(password), filename)
                print("File has been decrypted. Note that if the password used in the encryption does " \
            + "not match the password you entered in, the file will remain encrypted.")
        else:
                print("Invalid option. Closing the program...")

我正在使用简单的input()方法来获取我的数据(例如,测试&#39;),它一直告诉我在运行时输入的任何信息,我输入的名称没有定义。我没有看到任何格式错误,语法错误等。

4 个答案:

答案 0 :(得分:2)

您将要使用raw_input()而不是input()input尝试运行它作为Python表达式获取的表达式,而raw_input返回一个字符串。这是在Python 2.x中; 3.x raw_input中不存在。

当你得到NameError时,它会尝试将输入作为表达式运行,但test不存在。

答案 1 :(得分:1)

事实证明我的linux发行版有python 2.7.12和python 3.5.2。显然系统默认为python 2.7.12而不是更新的版本,所以我修改了它:

#!/usr/bin/python

为:

#!/usr/bin/python3

答案 2 :(得分:0)

  

它不断告诉我在运行时输入的任何信息,我刚刚输入的名称未定义。我没有看到任何格式错误,语法错误等。

您可能正在使用Python 2.x.您应该使用:raw_input(..)代替input(..)

答案 3 :(得分:0)

input函数将您输入的任何内容视为python表达式。您正在寻找的是raw_input函数,它将您的输入视为字符串。 切换input的所有raw_input,您应该没问题。