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

问题描述 投票:0回答:1

我正在使用itk加载一个3d卷文件,并且出现了一个奇怪的错误,但前提是我在PyCharm的Run Configurations中选中了Run with Python Console。 (这在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声明有所贡献(没有它,它也可以正常工作)。它也只发生在某些图像类型上:虽然.pngs不会发生这种情况,但它确实发生在.mhas上。您可以在this tutorial archive(sourceforge上的项目)中找到此类文件的示例。

所以我想了解为什么在交互式python控制台中发生这种情况以及我可以做些什么来避免它。

pycharm python-3.7 itk
1个回答
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控制台中运行时发生。(?)但我仍然不知道为什么会发生这种情况这种特殊的格式。

© www.soinside.com 2019 - 2024. All rights reserved.