UnboundLocalError: локальная переменная 'region', на которую ссылается перед присваиванием - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь создать объект, но у меня возникла эта проблема, но мне кажется, что я не допустил ошибок.

def handle(self, *args, **options):
        for entry in get_dataset():
            oblast = Place.objects.get_or_create(name=entry.get('OBL_NAME'))
            if entry.get('REGION_NAME') is not None:
                region = Place.objects.get_or_create(name=entry.get('REGION_NAME'),
                                            parent=oblast)
            if entry.get('CITY_NAME') is not None:
                city = Place.objects.get_or_create(name=entry.get('CITY_NAME'),
                                            parent=region)

Я не мог понять, почему переменная региона не работает

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

В последней части у вас есть

city = Place.objects.get_or_create(..., parent=region)

Кажется, переменная region не определена, если первое if является ложным (выполнение кода никогда не получит присвоить значение region в таком случае).

Может быть, вам нужно инициализировать переменную вне первого if (например, region = None или что-то непосредственно перед первым if).Вот пример того, как вы могли бы это сделать, но точный путь зависит от остальной части вашего кода:

oblast = Place.objects.get_or_create(name=entry.get('OBL_NAME'))

region = None
if entry.get('REGION_NAME') is not None:
    region = ...

if entry.get('CITY_NAME') is not None:
    city = Place.objects.get_or_create(
        name=entry.get('CITY_NAME'),
        parent=region)
0 голосов
/ 25 апреля 2019

Каким-то образом ваш код не соответствует первому условию if и, следовательно, ваша переменная региона не создается. Вы могли бы сделать что-то вроде этого:

def handle(self, *args, **options):
    for entry in get_dataset():
        oblast = Place.objects.get_or_create(name=entry.get('OBL_NAME'))
        if entry.get('REGION_NAME') is not None:
            region = Place.objects.get_or_create(name=entry.get('REGION_NAME'),
                                        parent=oblast)
        if entry.get('CITY_NAME') is not None and region:
            city = Place.objects.get_or_create(name=entry.get('CITY_NAME'),
                                        parent=region)
        else:
            city = Place.objecys.get_or_create(name=entry.get('CITY_NAME'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...