Python 脚本在 return 语句上挂断

Python script hung up on return statement

提问人:asingh 提问时间:9/21/2023 更新时间:9/21/2023 访问量:49

问:

我编写了一个脚本来打开、读取和返回保存在本地计算机上的 .npy 文件中的 numpy 数组。我之前已经做过很多次了,但是由于某种原因,我这次的脚本似乎挂在了return语句上。它打开、读取和关闭 npy 文件,将其保存在局部变量上,但是当函数应该返回数组时,它就会挂起,我不得不关闭程序。我已经通过在 VSCode 中调试并单步执行每一行来验证它是否在 return 语句上挂断。

if label == 0 or label == 1:
    print('Opening Label 1 arrays..')
    with open(f'npys\\labels\\label1.npy', 'rb') as f:
        label1 = np.load(f)
    if label == 1:
        return label1

if label == 0 or label == 2:
    print('Opening Label 2 centroid arrays..')
    with open(f'npys\\labels\\label2.npy', 'rb') as f:
        label2 = np.load(f)
    if label == 2:
        return label2

if label == 0 or label == 3:
    print('Opening Label 3 arrays..')
    with open(f'npys\\labels\\label3.npy', 'rb') as f:
        label3 = np.load(f)
    if label == 3:
        return label3

if label == 0 or label == 4:
    print('Opening Label 4 arrays..')
    with open(f'npys\\labels\\label4.npy', 'rb') as f:
        label4 = np.load(f)
    if label == 4:
        return label4

return label1, label2, label3, label4

老实说,我不知道该怎么做。我已经移动了变量,但仅此而已。任何帮助将不胜感激。

python-3.x numpy 文件

评论

0赞 Jesse Sealand 9/21/2023
你说的是哪个 return 语句?另外,为什么这段代码的末尾有一个 return 语句,这应该是做什么用的?
0赞 Jesse Sealand 9/21/2023
如果这是一个函数,请适当缩进并包含整个函数。
1赞 Marijn 9/21/2023
@JesseSealand 我猜这是类似的东西的主体,它要么返回单个文件的内容(如果参数为 1-4),要么在元组中返回所有文件(如果参数为 0)。关于进一步的诊断:您能否像在返回局部变量之前一样使用局部变量,即在读取文件后直接打印一些值?也许文件已损坏或存在某种版本冲突,如果您保存一个新的小文件并尝试读取并返回它,它是否也会失败?def readlabels(numlabel):label1.npy
0赞 Jesse Sealand 9/21/2023
我的想法几乎是一样的。可能需要在标签进入例程读取 numpy 文件之前预先定义标签,以便在您获得最终返回语句时它们存在。

答:

-2赞 asingh 9/21/2023 #1

解决!这个代码块没有问题,调用这个函数的行有问题!

所以基本上我试图获取标签并将它们分成块,挂断的行如下:

self.labels = torch.tensor(np.split(get_labels(label_num), num_frames))

我通过将其更改为以下内容来解决这个问题:

self.labels = torch.from_numpy(np.array(np.split(get_labels(label_num), num_frames)))

由于 np.split 返回一个 np 数组列表,我想异构列表绊倒了 pytorch,并且需要一段时间才能将其转换为张量。