AttributeError: объект 'NoneType' не имеет атрибута 'get' при записи в файл - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь очистить (используя al oop для разных пользователей) веб-сайт, а затем сохранить его в словаре и записать в файл.

Проблема в том, что пользователи исчисляются сотнями, и не у каждого пользователя одинаковые данные в json. Для пользователей, у которых нет определенного набора строк данных, это дает мне эту ошибку.

for i in range(10):
    u = User(list_of_users[i])

    try:
        data_list = [[u.name, u.full_name, u.date_of_birth
    ,u.current_age, p.job_info.get('UserId').get('JobId'), p.job_info_with_z.get('UserId').get('location')]]

    except AttributeError:
        data_list = [[u.name, u.full_name, u.date_of_birth
    ,u.current_age, p.job_info.get('UserId').get('JobId'), p.job_info_with_z.get('UserId').get('location')]]
    with open('test_players_data.csv', 'a', newline='') as file:
        writer = csv.writer(file, delimiter=',')
        writer.writerows(data_list)

.name вызывает метод для получения имени, например, мудрый для job_info и info_with_z.

, так что это работает для большинства пользователей, но для пользователей, у которых нет «UserId» «Это дает мне вышеуказанную ошибку. Но есть некоторые пользователи, у которых будет UserId, но не UserIdWithZ. Я хочу пропустить те с некоторыми значениями по умолчанию и продолжить очистку данных и записать их в файл. Как только он терпит неудачу, он не go вперед.

Должен быть способ дать значения по умолчанию, где нет ключей. Я урезал данные. Таким образом, у каждого пользователя есть более 30 различных значений, которые я пытаюсь разбить на 4 блока кода.

пример данных

{
'UserId':  {'jobId': '74', 'jobLocation': '72', 'jobType': '10'},
'UserIdWithZ: {'jobId': '74', 'jobLocation': '72', 'jobType': '10'}
}

Я просто хочу, чтобы эта строка / запись в .csv заполняла '' или '-' или 'na' там, где нет никаких данных и не просто сбой ,

Заранее спасибо

1 Ответ

2 голосов
/ 28 апреля 2020

Укажите значение по умолчанию, используя .get, поэтому в вашем случае

p.job_info.get('UserId', {}).get('JobId', '-')

Если вы ожидаете, что dict объединит в цепочку следующие get, вам нужно указать значение по умолчанию как {}. Если для job_info.get('UserId') значения нет, то значением по умолчанию будет None, для которого нет метода get.

Сделайте то же самое для всех методов .get,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...