功能外考虑的“返回”

2024-10-01 05:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

对于下面的类,我得到一个例外:

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')

Tags: inforreturnlineprobevtkgetarraygetoutput
3条回答

问题是你的缩进不一致。Python依赖缩进来确定代码块。要解决这个问题,您需要将probeVolume函数中的所有代码缩进相同的数量。你知道吗

函数的前两行与函数之间有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行缩进两个空格。示例-

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

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

修正:

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')

相关问题 更多 >