2015-10-28 65 views
-4

我在Python 2.7 一個非常令人費解的問題,我用Notepadd ++ 發展的不超過25行的腳本,Python的 運行時,它給在不同線路上的我「語法錯誤」後腳本重新運行它 即使該行在解釋器上運行正常。 例如,在簡單的語句中,例如爲變量賦值,對該變量的第二個或第三個賦值給了我語法錯誤。 我在解釋器上逐行逐行輸入,每次都成功執行 ,在最後一行中得到正確的結果。 我試圖重新編寫並運行相同的腳本(逐行復制)IDLE(這也給我隨機行語法錯誤),最後訴諸微軟記事本。沒有更好的。 請你的幫助讓我理解Python這樣複雜的語言。謝謝。 我使用WIndows 10,該腳本是Crypto.Hash/Crypto.cipher的哈希和AES加密測試。隨機語法錯誤

我準備提供腳本的副本。

謝謝你們兩個試圖幫助。下面我張貼我的劇本,並在最後發表評論,是解釋者的確切答覆。脫字符正確指向變量的結尾。調用padmessage()後的打印命令格式不正確,它只在一行中。再次感謝你! ................................................. ...

# bobo.py 
    def padmessage(): 
     global message, pad 
     if len(message) % 16 == 0: 
      return 
     padding = 16 - len(message) % 16 
     message = message + pad * padding 
    def unpadmessage(): 
     global message, pad 
     message = message.rstrip(pad) 
    pad = '&' 
    key = 'keykey' 
    print('\nOriginal key : %s' % key) 
    from Crypto.Hash import SHA256 
    print('\n Key : %s \nLength of key: %i' % (key, len(key)) 
    key = SHA256.new(key).hexdigest() 
    print('\nHashed key %s : \nLength : %i' % (skey, len(key)) 
    key = key[0:32] 
    print('\nResized key : %s \nLength : %i' %(key, len(key)) 
    message = 'sjqwkweoewoykjjasdo' * 31 
    print('\nMessage : %s \nLength of message: %i ' % (message, len(message)) 
    padmessage() 
    print('\nPadded message : %s \nLength of message: %s' % (message, len(message)) 
    from Crypto.Cipher import AES 
    IV = key[16:32] 
    print('\nIV : %s \nIV length : %s ' % (IV, len(IV)) 
    crypt = AES.new(key, AES.MODE_CBC, IV) 
    message = crypt.encrypt(message) 
    print('\nEncrypted message : %s ' % cypher) 
    decrypt = AES.new(key, AES.MODE_CBC, IV) 
    message = decrypt.decrypt(cypher) 
    print('\nAfter decryption : %s' % message) 
    unpadmessage() 
    print('\nAfter unpadding : %s' % message) 

    # My call in python27: 
    # execfile('bobo.py') 

    # The response from Python: 

    # Traceback (most recent call last): 
     # File "stdin", line 1 in <module> 
     # File "bobo.py", line 16 
     # key = SHA256.new(key).hexdigest() 
      #^ 
    # SyntaxError: invalid syntax 
    # >>> 

Auuuuugh!非常謙卑和歉意。我的錯誤出現在打印聲明中,最後缺少括號。而且,由於我正在使用它的單個副本更新打印語句,因此該錯誤將隨機出現(並增加行)在我的腳本上。線索是由John la Rooy發佈的,他發佈了這個消息,錯誤可能會「出現在遠處」。謝謝!它出現在下一行(鍵=)完全拋棄我。 再一次,非常感謝......「學習正在犯錯誤......」(請不要太多)

+4

把至少一行給你的錯誤和錯誤的確切文本。這聽起來很牽強,但目前沒有辦法評估你的說法。 –

回答

-1

語法錯誤可能會在距報告行有一段距離處引起,例如,如果您是在先前的一行中缺少括號或其他括號。

下面的問題與print語句不符。

>>> def hypot(x, y): 
...  return ((x ** 2) + (y ** 2) ** 0.5 
... 
... print hypot(3, 4) 
    File "<stdin>", line 4 
    print hypot(3, 4) 
     ^
SyntaxError: invalid syntax 

通過不將提示切換回>>>,REPL給我們提供了一個線索。但是你不會在你的編輯器中看到它。

如果您可以在您的問題中包含整個25行,我們很容易發現。