2016-12-02 1 views
1

이 실패"assert 211 == 211"이 실패하는 이유는 무엇입니까?

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: Number of columns in train data must be 'num_fetaures + 1 = 211' (label) but is '211'. 

내 질문은 : 다른 일이 잘못하고 나는 단순히 문제 또는를 찾을 수 없기 때문에이 실패 할 수 있습니다 얼마나 많은 내 코드가 셋째가되지 않는 이유는 무엇입니까 assert!

+1

교육 데이터의 예를 게시 할 수 있습니까? 어쩌면 모든 열을 가지고 있지만 단지 몇 행만 – shadowtalker

+2

일 것입니다. type (train_data.shape [1])의 출력을 보여줄 수 있습니까? 'int' 대신'numpy.int64' 타입을 가질 수도 있습니다. – shadowtalker

+0

은 가치가 있습니다.'assert pd.DataFrame ([[1,2,3], [4,5,6]])으로 재현 할 수 없습니다. .as_matrix(). shape [1] == 3' – shadowtalker

답변

6

형식 문자열은 위치 선택기 0을 두 번 사용하여 첫 번째 인수를 두 번 선택합니다. 실제로는 train_data.shape[1]의 값을 보지 않고 있는데, 두 경우 모두 mat_col_size의 값을 인쇄하고 있습니다. 난 당신이 의미 생각 : 자동 명시 적으로 번호를 지정하지 않고 위치 인수에 자리를 일치 할 수 있도록

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

(거기 : 그것은 Py를 2.7 이상을의 가정

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

또는, 당신은 단지를에 간단하게 할 수 d 형식 단위를 지정할 이유가 없으며 printf이 아니기 때문에 자체적으로 문자열을 지정합니다.

+0

* facepalm *보다 엄격한 타입 검사를 할 수도있다. – displayname

+0

@displayname : 적어도 재미있는 히트가 생겼다.'{0 : 1}'은 순차적 인 위치 인수를 제공한다고 가정 할 때 언뜻 보면 쉽게 읽을 수 없다. 실제로 빈 문자열을 단일 공백으로 포맷하고 (다른 모든 인수는 변경하지 않고 그대로 두는) 인수를 채우는 것이지만, 가장 단순한 경우보다 미묘합니다. 이런 종류의 문제는 왜 내가 실제로 재사용 할 필요가없는 한 항상 나의 위치 포맷 단위의 번호를 매기는 것을 피하는 이유이다. – ShadowRanger

+0

나는 미래를 염두에두고 그것을 생각할 것입니다 : D하지만 가장 사악한 것은 단순한 실명이며 잠시 후에 프로그래밍을하게됩니다. – displayname

관련 문제