我的代码缩进有问题



我正在做一些基于TouchDesigner的python3.5脚本,其中一个是缩进错误。拜托,我需要帮助,我几天前刚开始使用python。提前谢谢。

# me - this DAT
# 
# dat - the DAT that received the event
# rowIndex - the row number that was added
# message - a readable description of the event
# channel - the numeric value of the event channel
# index - the numeric value of the event index
# value - the numeric value of the event value
# input - true when the event was received
# bytes - a byte array of the received event
# 
# Example:
# message  channel index value     bytes
# Note On  1        63   127       90 2f 127

def onReceiveMIDI(dat, rowIndex, message, channel, index, value, input, bytes):
x = op('/lyricsController/Lyrics_Texts/convert1').numRows - 1
if x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 17:
op('/lyricsController/passadorLyrics_const').par.value0 += 1.0
op('/lyricsController/passadorLyrics_const').par.name0 = 'PASSANDO'
elif x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 18:
op('/lyricsController/passadorLyrics_const').par.value0 += -1.0
op('/lyricsController/passadorLyrics_const').par.name0 = 'VOLTANDO'
elif x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 19:
op('/lyricsController/passadorLyrics_const').par.value0 = 0
op('/lyricsController/passadorLyrics_const').par.name0 = 'RESETADO'     
return 

这是解释器的反馈:

DAT 编译错误:/lyricsController/midievent1_callbacks 文件 "/lyricsController/midievent1_callbacks
",第 33
行返回
^
IndentationError:unindexent 与任何外部缩进级别都不匹配

文件 "/lyricsController/midievent1_callbacks",第 33
行返回
^
IndentationError:unindexent 与任何外部缩进级别都不匹配

Python 是一种缩进作用域语言,用简单的英语来说,它基本上意味着它使用缩进来确定哪行代码属于哪个作用域级别。

例如,当python读取你的代码时,它会检查缩进级别,以确定该行是否属于以及是否属于循环或函数或类似的东西。

您可以在此处阅读更多相关信息

你应该阅读编译错误。 它说第 33 行是错误所在。 第 33 行是:

return

返回语句也需要缩进。 它应该是:

return

即,return 语句应与函数一样缩进。

也就是说,在这种情况下,我认为您甚至不需要返回声明。 你为什么不直接删除它,看看你的代码是否按预期工作? 我认为会的。

编辑:

作者在下面评论说,他们尝试了各种不同的缩进量return,但没有一个奏效。 这样做的原因是函数中的其他所有内容都缩进了太多。 每层应缩进一个缩进,标准通常为 1 个缩进 = 1 个制表符或 4 个空格。 所以这个:

def onReceiveMIDI(dat, rowIndex, message, channel, index, value, input, bytes):
x = op('/lyricsController/Lyrics_Texts/convert1').numRows - 1
if x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 17:
op('/lyricsController/passadorLyrics_const').par.value0 += 1.0
op('/lyricsController/passadorLyrics_const').par.name0 = 'PASSANDO'
elif x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 18:
op('/lyricsController/passadorLyrics_const').par.value0 += -1.0
op('/lyricsController/passadorLyrics_const').par.name0 = 'VOLTANDO'
elif x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 19:
op('/lyricsController/passadorLyrics_const').par.value0 = 0
op('/lyricsController/passadorLyrics_const').par.name0 = 'RESETADO'     
return

。应该是这样的:

def onReceiveMIDI(dat, rowIndex, message, channel, index, value, input, bytes):
x = op('/lyricsController/Lyrics_Texts/convert1').numRows - 1
if x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 17:
op('/lyricsController/passadorLyrics_const').par.value0 += 1.0
op('/lyricsController/passadorLyrics_const').par.name0 = 'PASSANDO'
elif x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 18:
op('/lyricsController/passadorLyrics_const').par.value0 += -1.0
op('/lyricsController/passadorLyrics_const').par.name0 = 'VOLTANDO'
elif x > 0 and op('/lyricsController/midievent1')[1,0] == 'Note On' and op('/lyricsController/midievent1')[1,2] == 19:
op('/lyricsController/passadorLyrics_const').par.value0 = 0
op('/lyricsController/passadorLyrics_const').par.name0 = 'RESETADO'     
return

注意: 1.代码的每一层都缩进了一定量。 第一层,例如x = op(...,缩进4个空格。 然后if语句内的内容缩进 8 = 4 * 2 个空格。 等。 2.return语句应该不是发生在if语句中,而是发生在代码的主体中,因此它的缩进量与代码的主体相同。

我说得对,你根本不需要return语句,但值得解释为什么你首先得到这个错误,即使你尝试缩进语句,因为你可能会遇到这个问题将来。 事实上,如果您使用制表符缩进一行和 4 个空格缩进另一行,您可能会遇到这样的错误! 您需要为缩进方式选择一个规则,然后坚持下去。 希望这有帮助。

最新更新