2016-12-31 64 views
0

当我尝试运行我的代码并从另一个文件中导入数组时,我不断收到语法错误:在python中使用ast.literal_eval(open(“filename”)。readlines()[0])的语法错误

Traceback (most recent call last): 
    File "run.py", line 21, in <module> 
    passwords = ast.literal_eval(open("passwords.txt").readlines()[0]) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 49, in literal_eval 
    node_or_string = parse(node_or_string, mode='eval') 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 37, in parse 
    return compile(source, filename, mode, PyCF_ONLY_AST) 
    File "<unknown>", line 1 
    [‘test’] 
    ^
SyntaxError: invalid syntax 

件['test']是外部文件“passwords.txt”的内容,然而让我困惑的是,在下面的代码中,如果我只包含前2个变量,代码运行得非常好,但是当第二个被添加它会抛出一个错误(也是所有变量中的文件内容都是相同的)

adjectives = ast.literal_eval(open("Adjectives.txt").readlines()[0]) 
nouns = ast.literal_eval(open("Nouns.txt").readlines()[0]) 
passwords = ast.literal_eval(open("passwords.txt").readlines()[0]) 
usernames = ast.literal_eval(open("usernames.txt").readlines()[0]) 

唯一的其他相关的新代码是这样的:

def WOPR(): 
    login = raw_input("Username: ") 
    login_password = raw_input("Password: ") 
    login_password = psudo_encrypt(login_password) 
    for name in usernames: 
     if name == login: 
      for word in passwords: 
       if word == login_password: 
        print("Greetings " + login) 
        play(true, login) 
       else: 
        print("Incorrect Password \n-------Connection Terminated-------") 
     elif login == "Joshua": 
      print("Greetings Professor Falken \nWould you like to play a game?") 
      play(true, "Professor") 
     else: 
      WOPR() 

任何任何想法可能是什么原因造成这种情况?我错过了一个非常明显的语法问题吗?在此先感谢

+0

*文件内容也是相同的所有变量* ...你确定吗?否则,这是不可能的:*如果我只包含前2个变量,代码运行得很好*。请显示内容,以便我们重现。 – Parfait

+0

一般而言,您不应该试图在一行代码中塞满太多东西。明智地使用变量来存储中间结果。另外,'read()'一次返回一行。无需读取整个文件。 –

+0

@ Code-Apprentice感谢您的建议,我有所得到,但这不是什么大事,它更多的是我为自己做的一个概念证明,所以它不会超过10个字符串每个阵列都不会太大 – dbradley

回答

3
[‘test’] 
^ ^

我已标记的两个字符是弯撇号(‘’),不直撇号(')。您可能通过从网站复制和粘贴代码,或者通过在不适合使用代码的文本编辑器中编辑代码来获得它们。

用正常的撇号替换这些字符。