Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么是;断言211==211“;弱点?_Python_String Formatting - Fatal编程技术网

Python 为什么是;断言211==211“;弱点?

Python 为什么是;断言211==211“;弱点?,python,string-formatting,Python,String Formatting,这失败了: train_data = pd.concat([train_cancelled, train_not_cancelled]).as_matrix() mat_col_size = int((num_days * 3) + 1) assert isinstance(mat_col_size, int), "mat_col_size is not an int" assert isinstance(train_data.shape[1], int), "train_data.shap

这失败了:

train_data = pd.concat([train_cancelled, train_not_cancelled]).as_matrix()

mat_col_size = int((num_days * 3) + 1)

assert isinstance(mat_col_size, int), "mat_col_size is not an int"
assert isinstance(train_data.shape[1], int), "train_data.shape[1] is not an int"

assert train_data.shape[1] == mat_col_size, \
    "Number of columns in train data must be 'num_fetaures + 1 = {0:d}' (label) but is '{0:1}'." \
        .format(mat_col_size, train_data.shape[1])
它将打印:

AssertionError:列车数据中的列数必须为'num_fetaures+1=211'(标签),但为'211'。

我的问题是:有多少不同的事情会出错并导致失败,因为我根本找不到问题,或者我的代码没有使第三个
断言的原因

您的格式字符串使用位置选择器
0
两次选择第一个参数。实际上,您并没有看到
train\u data.shape[1]
的值,而是在这两种情况下打印
mat\u col\u size
的值。我想你的意思是:

"Number of columns in train data must be 'num_fetaures + 1 = {0:d}' (label) but is '{1}'."
或者,假设它是Py 2.7+,您可以简化为:

"Number of columns in train data must be 'num_fetaures + 1 = {}' (label) but is '{}'."

允许它自动将占位符与位置参数匹配,而无需显式指定数字(并且也没有理由指定
d
格式单位;它不是
printf
,它将自行字符串化).

您的格式字符串使用位置选择器
0
两次选择第一个参数。实际上,您并没有看到
train\u data.shape[1]
的值,而是在这两种情况下打印
mat\u col\u size
的值。我想你的意思是:

"Number of columns in train data must be 'num_fetaures + 1 = {0:d}' (label) but is '{1}'."
或者,假设它是Py 2.7+,您可以简化为:

"Number of columns in train data must be 'num_fetaures + 1 = {}' (label) but is '{}'."

允许它自动将占位符与位置参数匹配,而无需显式指定数字(并且也没有理由指定
d
格式单位;它不是
printf
,它将自行进行字符串化)。

您可以发布一个训练数据的示例吗?也许有所有的列,但至少只有几行,你能给我们展示一下
类型(train_data.shape[1])
的输出吗?它可能有类型
numpy.int64
而不是
int
,我不能用
assert-pd.DataFrame([[1,2,3],[4,5,6]])进行复制,因为它是矩阵().shape[1]==3
@ssdecontrol我希望
numpy.int64
能够正确实现与普通整数的比较。还是我错了?我想我们可以把这当作一个打字错误来结束。你能举一个训练数据的例子吗?也许有所有的列,但至少只有几行,你能给我们展示一下
类型(train_data.shape[1])
的输出吗?它可能有类型
numpy.int64
而不是
int
,我不能用
assert-pd.DataFrame([[1,2,3],[4,5,6]])进行复制,因为它是矩阵().shape[1]==3
@ssdecontrol我希望
numpy.int64
能够正确实现与普通整数的比较。或者我错了吗?我想我们可以用typo.facepalm来结束这篇文章…@displayname:你至少想出了一个有趣的点子,
{0:1}
当你假设你只是提供了顺序位置参数时,乍一看很容易被错误地理解。实际上,它只是将格式化为空字符串的参数填充到一个空格中(并保留所有其他参数不变),但这比最简单的情况更微妙。这类问题就是为什么我总是避免给我的位置格式单位编号,除非我真的需要重用一个。我想我以后会记住这一点:D但最坏的事情是编程一段时间后会出现的简单失明。facepalm…@displayname:You至少想出了一个有趣的点子,
{0:1}
乍一看,如果您假定您只是提供了连续的位置参数,则很容易被错误地读取。实际上,它只是将格式化为空字符串的参数填充到一个空格中(并保留所有其他参数不变),但这比最简单的情况更微妙。这类问题就是为什么我总是避免给我的位置格式单位编号,除非我真的需要重用一个。我想我以后会记住这一点:但最坏的事情是编程一段时间后的简单盲目。