我在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; ...(请不要太多!)
答案 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行,我们很容易发现。