【问题标题】:Random syntax errors in script脚本中的随机语法错误
【发布时间】:2016-01-28 17:03:39
【问题描述】:

我在 Python 2.7 中有一个非常令人费解的问题 我使用记事本++ 开发一个不超过 25 行的脚本后,在 Python 上运行时 它在重新运行脚本的不同行时给了我“语法错误” 即使该行在解释器上运行正常。 例如,在简单的语句中,比如为变量赋值,第二次或第三次赋值给该变量会给我语法错误。 我在解释器上逐行输入的长度,每个都执行 成功,在最后一行得到正确的结果。 我试图在 IDLE 上重写和运行相同的脚本(逐行复制)(这也给了我随机的行语法错误),最后求助于 Microsoft 记事本。没有更好的。 请您的帮助将使我理解 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  
   # >>>  

啊啊啊啊!非常谦虚和抱歉。我的错误出现在打印语句中,最后缺少括号。而且由于我使用它的单个副本更新打印语句,因此错误将随机出现(并且行数增加)在我的脚本上。这条线索是由发布该线索的 John la Rooy 给出的,错误可能“出现在远处”。谢谢!它出现在下一行(key =)中,完全让我失望。 再次,非常感谢......“学习就是犯错误”......(请不​​要太多!)

【问题讨论】:

  • 放置至少其中一行给出错误和错误的确切文本。这听起来有些牵强,但目前无法评估您的主张。

标签: python python-2.7 random syntax


【解决方案1】:

语法错误可能在与报告的行有一定距离时导致,例如,如果您在前一行缺少括号或其他括号。

下面的问题与打印语句不符。

>>> 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 在这里为我们提供了一个线索,它没有将提示切换回&gt;&gt;&gt;。但是您不会在编辑器中看到它。

如果您可以在问题中包含完整的 25 行,我们将很容易发现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多