Python 《铸造核武器》-“elif”和“else”语句的问题

Python 《铸造核武器》-“elif”和“else”语句的问题,python,python-2.7,nuke,compositing,Python,Python 2.7,Nuke,Compositing,为了简单起见,我正在用NUKE编写一个脚本,它将节点图中选定的节点对齐成Y轴上的一条直线。我在编写elif语句时遇到了一些问题,它要么没有按照我想要的方式运行,要么给了我一个语法错误 因此,该功能的基础是: ELSE语句-仅选择一个节点时-弹出错误消息,说明用户必须选择多个节点 ELIF语句-当选择位于同一Y轴上的两个或多个节点时-显示它们已对齐的消息 IF语句-当在不同的Y轴上选择两个或多个节点时-它应将所有节点正确对齐成一条直线 # Getting selected nodes and ma

为了简单起见,我正在用NUKE编写一个脚本,它将节点图中选定的节点对齐成Y轴上的一条直线。我在编写elif语句时遇到了一些问题,它要么没有按照我想要的方式运行,要么给了我一个语法错误

因此,该功能的基础是:

ELSE语句-仅选择一个节点时-弹出错误消息,说明用户必须选择多个节点

ELIF语句-当选择位于同一Y轴上的两个或多个节点时-显示它们已对齐的消息

IF语句-当在不同的Y轴上选择两个或多个节点时-它应将所有节点正确对齐成一条直线

# Getting selected nodes and making them into a list

selNodes = nuke.selectedNodes()
list = []

for node in selNodes:
            n = node['ypos'].value()
            list.append(n)

# Defining the actual function

def alignY():

    # Aligning the selected nodes using average position of every node. 
    # Must select more than one node in order to get an average.

    if len(selNodes) > 1:

        total = sum(list)
        average = total / len(selNodes)

        for node in selNodes:
            n = node['ypos'].setValue(average)

    # Getting the position of a single node from the list
    firstNodePostion = list[0]

    # Checking position of the single node is equivalent to the average 
    # To prevent nodes aligning again)  

    elif average == firstNodePostion:
        nuke.message("Nodes already Aligned")

    # When no nodes or only one node is selected this message pops up         
    else:
        nuke.message("Select Two or more Nodes")

alignY()

您的问题是有一条语句位于if和elif之间,这可能会导致语法错误


但是很难说,因为您没有提供确切的错误消息,但是从语法角度来看,不应该有另一条语句分隔if和elif。

您必须根据Python规则缩进代码行

因此,每个缩进级别需要使用4个空格–请看

现在alignY方法按预期工作


欢迎来到堆栈溢出!不幸的是,你的问题陈述不清楚。要么不是我想要的功能,要么它给了我一个语法错误请描述行为的不同,并提供你在表面上收到的错误的完整回溯,看起来您可能有缩进问题,或者有一行未缩进的代码中断了if和elify之间的连接。您的代码片段是无效的,因此没有人能理解它。请用正确的答案编辑您的问题。问题实际上是,OP发布的代码片段的语法无效,因此我们无法知道问题的真正所在,因此我们甚至不应该尝试回答问题,因为这最多只能是一个猜测。
import nuke

selNodes = nuke.selectedNodes()
list = []

for node in selNodes:
    n = node['ypos'].value()
    list.append(n)

def alignY():

    if len(selNodes) > 1:
        total = sum(list)
        average = total / len(selNodes)

        for node in selNodes:
            n = node['ypos'].setValue(average)
            firstNodePostion = list[0]

    elif average == firstNodePostion:
        nuke.message("Nodes already Aligned")

    else:
        nuke.message("Select Two or more Nodes")

alignY()