脚本中的随机语法错误

时间:2015-10-28 18:51:21

标签: python python-2.7 random syntax

我在Python 2.7中遇到了一个非常令人费解的问题 我用Notepadd ++ 在开发不超过25行的脚本之后,在Python上运行它 它给了我"语法错误"在重新运行它的脚本的不同行上 即使该行在解释器上运行正常。 例如,在诸如为变量赋值的简单语句中,对该变量的第二次或第三次赋值给出了语法错误。 我在解释器上逐行输入并逐行执行 成功,在最后一行得出正确的结果。 我试图在IDLE上重新编写并运行相同的脚本(逐行复制)(这也给出了随机行语法错误),最后使用了Microsoft Notepad。没有更好的。 请你的帮助让我理解像Python这样复杂的语言。谢谢。 我使用的是WIndows 10,该脚本是对Crypto.Hash / Crypto.cipher的Hashing和AES加密的测试。

我准备提供一份剧本副本。

感谢你们两位帮忙。下面我发布我的脚本,并在评论结束时,是解释器的确切响应。插入符号正确指向变量的末尾。调用padmessage()后的print命令格式不正确,它在一行中。再次感谢你! .................................................. ..

  # 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!非常谦卑和道歉。我的错误出现在print语句中,最后错过了一个括号。由于我用一个副本更新了print语句,因此错误会在我的脚本上随机出现(并且增加行)。线索由约翰拉罗伊发出,他发布了这个线索并且错误可能会出现在距离的地方。谢谢!它出现在下一行(key =)完全抛弃了我。 再次,非常感激......&#34;学习犯错误&#34; ...(请不​​要太多!)

1 个答案:

答案 0 :(得分:-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行,我们很容易发现。