如何避免在交互式python控制台中使用SIGSEGV?

时间:2019-03-28 10:48:37

标签: pycharm python-3.7 itk

我当时使用itk加载3d体积的文件并收到一个奇怪的错误,但是只有当我使用PyCharm的“运行配置”中的使用Python控制台运行来运行代码时,才出现此错误。 (这将在python控制台中运行该程序,如果在程序运行后访问变量,这将非常方便。)

import itk

def read_the_image(file_path):
    global image
    itk_image = itk.imread(file_path)
    image = itk.GetArrayViewFromImage(itk_image)
    return image

if __name__ == '__main__':
    read_the_image("./t0.mha")

我还注意到global语句正在起作用(如果没有,它也可以正常工作)。它也仅在某些图像类型上发生:虽然在.png s中没有发生,但在.mha s中发生。您可以在this tutorial archive(sourceforge上的一个项目)中找到此类文件的示例。

所以我想了解为什么在交互式python控制台中会发生这种情况,以及如何避免这种情况。

1 个答案:

答案 0 :(得分:0)

我找到了一个避免此错误的解决方案,但我仍然不明白为什么它会首先出现。关键是将数据复制到新图像中:

import itk
import numpy as np

def read_the_image(file_path):
    global image
    itk_image = itk.imread(file_path)
    image = np.copy(itk.GetArrayViewFromImage(itk_image))
    return image

if __name__ == '__main__':
    image = 3
    read_the_image("./t0.mha")

我猜我们从itk.GetArrayViewFromImage获得的数组访问某种资源,该资源必须在程序结束之前正确关闭,而在交互式python控制台中运行该资源可能不会发生。(?)但我仍然有不知道为什么这种特殊格式会发生这种情况。