проверка согласованности данных: TypeError: аргумент типа «NoneType» не повторяется

поэтому в основном я пишу несколько кодов, чтобы проверить, согласуются ли мои данные. Я написал приведенный ниже код, но он показывал TypeError: аргумент типа «NoneType» не является итерируемым, я несколько раз пытался изменить код, но все равно появляется та же ошибка. Большое спасибо.

def checkdata(sex,school):
    if (sex == 'F') and ('boys school' in school) :
        return 'inconsistent'
    if (sex == 'M') and ('girls school' in school):
        return 'inconsistent'
    return


def Dif() :
    with arcpy.da.UpdateCursor(DATA_SET,
        [sex, school]) as Cursor :
    for Cols in Cursor :

            Data = checkdata(Cols[0], Cols[1])
            if Data is not None:
                print (Data, " ",Cols)

person Tammy    schedule 05.12.2017    source источник
comment
Я подозреваю, что сообщение об ошибке содержится в операторе for (вы не включили полное сообщение об ошибке), что означает, что Cursor является None, а не тем, что вы ожидали. Используйте оператор print или два, чтобы отслеживать значения, которые вы используете. Если у вас все еще есть проблемы, опубликуйте минимальный, полный, проверяемый пример. Мы не сможем эффективно помочь вам, пока вы не опубликуете свой код MCVE и точно не опишите проблему. Мы должны иметь возможность вставить ваш опубликованный код в текстовый файл и воспроизвести проблему, которую вы описали.   -  person Prune    schedule 05.12.2017
comment
Где возникает ошибка? Кстати, я думаю, что лучше явно возвращать None в конце checkdata()...   -  person Jarvis Cochrane    schedule 05.12.2017
comment
На самом деле полное сообщение об ошибке указывало на то, что ошибка связана с этими двумя кодами: if (sex == 'F') и ('boys school' in school): вернуть "несовместимый" if (sex == 'M') и («школа для девочек» в школе): вернуть «непоследовательно» ›››   -  person Tammy    schedule 05.12.2017


Ответы (2)


В этом случае переменная «Курсор» имеет значение «Нет», вы можете проверить это, распечатав ее перед использованием в цикле.

Когда цикл пытается перебрать None, он вызывает показанную ошибку.

ОБНОВИТЬ:

В этом случае я бы предположил, что школа — это None, и приведенные выше рассуждения верны. Пожалуйста, указывайте полное сообщение об ошибке, когда задаете подобные вопросы.

person pypypy    schedule 05.12.2017
comment
спасибо за вашу помощь, но я попробовал тот же цикл с другими функциями, и все было в порядке, плюс сообщение об ошибке, указывающее, что проблема в этих двух строках: if (sex == 'F') и ('мальчики школа' в школе) : вернуть «непоследовательный», если (пол == «М») и («школа для девочек» в школе): вернуть «непоследовательный». Просто до сих пор не могу понять, где проблема. - person Tammy; 05.12.2017

Ах. Для одной из ваших записей данных вы должны получить None в качестве значения school. TypeError вызывается оператором in, который ожидает тип последовательности в качестве второго операнда. None это не тип последовательности - это None ;-)

Попробуйте добавить print(sex, school) в качестве первой строки checkdata(), чтобы убедиться, что параметры соответствуют вашим ожиданиям.

person Jarvis Cochrane    schedule 05.12.2017
comment
благодарю вас. Я думаю, что это проблема, с которой я столкнулся. Некоторые данные в школе и сексе отсутствуют, поэтому, как только их нет, он останавливается и выдает ошибку. так что я должен сделать прямо сейчас, чтобы продолжить работу, даже если это None в поле. - person Tammy; 05.12.2017