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}
乍一看,如果您假定您只是提供了连续的位置参数,则很容易被错误地读取。实际上,它只是将格式化为空字符串的参数填充到一个空格中(并保留所有其他参数不变),但这比最简单的情况更微妙。这类问题就是为什么我总是避免给我的位置格式单位编号,除非我真的需要重用一个。我想我以后会记住这一点:但最坏的事情是编程一段时间后的简单盲目。