2016-12-31 25 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’] 
^ ^

我已標記的兩個字符是彎撇號(‘’),不直撇號(')。您可能通過從網站複製和粘貼代碼,或者通過在不適合使用代碼的文本編輯器中編輯代碼來獲得它們。

用正常的撇號替換這些字符。