首页 > 解决方案 > 如何使用“断言”命令将输入​​限制为仅获取一组数据中的列数?

问题描述

我已经编写了一个函数,可以在给定数据输入和一个名为 col_num 的变量时检索特定的数据列,但是我需要编写一个断言命令,该命令不会让输入 col_num 超过数据中的列数(为此我假设我不知道列数或有太多无法计算)。

我的功能如下:

import numpy as np
data = np.loadtxt('data.csv', delimiter = ',', skiprows = 1)
def get_column(data, col_num):
    assert(len(data.shape) == 2
    assert type(col_num) is int
    #assert goes here
    return data[:, col_num]

任何帮助将不胜感激,谢谢!

编辑:我添加了函数必须满足的代码图像。

https://i.stack.imgur.com/TlpMw.png 该代码满足中间单元格,但导致底部单元格出错。

标签: pythonnumpy

解决方案


首先,不要assert用于运行时检查。它可以被优化掉:改为引发异常。

其次,正如评论所指出的,您确实拥有数据:

if data.shape[1] < col_num:
    raise ValueError(f"Supplied col num of {col_num} is greater than {data.shape[1]} columns")

编辑:

您的断言失败,因为您实际上并未测试负列号:您需要添加一行这样做。但是我重复我上面所说的:断言属于我是测试套件本身,或者在开发中,而不是在生产代码中。你不能保证它不会被优化掉。


推荐阅读