为什么"断言211 == 211"失败了?

dis*_*ame 1 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.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])
Run Code Online (Sandbox Code Playgroud)

它将打印:

AssertionError: Number of columns in train data must be 'num_fetaures + 1 = 211' (label) but is '211'.
Run Code Online (Sandbox Code Playgroud)

我的问题是:有多少不同的东西可能出错并导致失败,因为我根本找不到问题或我的代码没有成为第三个的原因assert!

Sha*_*ger 6

您的格式字符串是使用位置选择器0两次选择第一个参数两次.你实际上并没有看到train_data.shape[1]它的价值,它打印了mat_col_size两种情况下的价值.我想你的意思是:

"Number of columns in train data must be 'num_fetaures + 1 = {0:d}' (label) but is '{1}'."
Run Code Online (Sandbox Code Playgroud)

或者,假设它是Py 2.7+,你可以简化为:

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

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