"return" 考虑在函数之外

"return" considered outside the function

对于下面的 class,我遇到了这个异常:

return probe.GetOutput().GetPointData().GetArray('ImageScalars')
SyntaxError: 'return' outside function

为什么Python在函数外考虑"return"?这是缩进问题吗?谢谢

def probeVolume(self,volumeNode,rulerNode):
  # get ruler endpoints coordinates in RAS 
    p0ras = rulerNode.GetPolyData().GetPoint(0)+(1,)
    p1ras = rulerNode.GetPolyData().GetPoint(1)+(1,)

  # Convert RAS to IJK coordinates of the vtkImageData
  ras2ijk = vtk.vtkMatrix4x4()
  volumeNode.GetRASToIJKMatrix(ras2ijk)
  p0ijk = [int(round(c)) for c in ras2ijk.MultiplyPoint(p0ras)[:3]]
  p1ijk = [int(round(c)) for c in ras2ijk.MultiplyPoint(p1ras)[:3]]

    # Create VTK line that will be used for sampling
  line = vtk.vtkLineSource()
  line.SetResolution(100)
  line.SetPoint1(p0ijk[0],p0ijk[1],p0ijk[2])
  line.SetPoint2(p1ijk[0],p1ijk[1],p1ijk[2])

    # Create VTK probe filter and sample the image
  probe = vtk.vtkProbeFilter()
  probe.SetInputConnection(line.GetOutputPort())
  probe.SetSourceData(volumeNode.GetImageData())
  probe.Update()

    # return VTK array 
  return probe.GetOutput().GetPointData().GetArray('ImageScalars')

问题是你的缩进不一致。 Python 根据缩进来确定代码块。要解决此问题,您需要将 probeVolume 函数中的所有代码缩进相同的量。

这是一个缩进错误。函数的前两行是双缩进的。

修复:

def probeVolume(self,volumeNode,rulerNode):
  # get ruler endpoints coordinates in RAS 
  p0ras = rulerNode.GetPolyData().GetPoint(0)+(1,)
  p1ras = rulerNode.GetPolyData().GetPoint(1)+(1,)

  # Convert RAS to IJK coordinates of the vtkImageData
  ras2ijk = vtk.vtkMatrix4x4()
  volumeNode.GetRASToIJKMatrix(ras2ijk)
  p0ijk = [int(round(c)) for c in ras2ijk.MultiplyPoint(p0ras)[:3]]
  p1ijk = [int(round(c)) for c in ras2ijk.MultiplyPoint(p1ras)[:3]]

    # Create VTK line that will be used for sampling
  line = vtk.vtkLineSource()
  line.SetResolution(100)
  line.SetPoint1(p0ijk[0],p0ijk[1],p0ijk[2])
  line.SetPoint2(p1ijk[0],p1ijk[1],p1ijk[2])

    # Create VTK probe filter and sample the image
  probe = vtk.vtkProbeFilter()
  probe.SetInputConnection(line.GetOutputPort())
  probe.SetSourceData(volumeNode.GetImageData())
  probe.Update()

    # return VTK array 
  return probe.GetOutput().GetPointData().GetArray('ImageScalars')

函数前两行距离函数有4个空格

def probeVolume(self,volumeNode,rulerNode):
  # get ruler endpoints coordinates in RAS 
    p0ras = rulerNode.GetPolyData().GetPoint(0)+(1,)
    p1ras = rulerNode.GetPolyData().GetPoint(1)+(1,)

我不是 100% 确定这是否是问题所在,但请尝试将第 3 行和第 4 行缩进 2 个空格。例子-

def probeVolume(self,volumeNode,rulerNode):
  # get ruler endpoints coordinates in RAS 
  p0ras = rulerNode.GetPolyData().GetPoint(0)+(1,)
  p1ras = rulerNode.GetPolyData().GetPoint(1)+(1,)