Тест Python, если объект существует

Я считаю, что плохой стиль использовать try: за исключением: для управления потоком, но я не могу понять, как написать следующий код, чтобы проверить, существует ли поле DB в Django. Это «грязный» код, который работает:

@receiver(pre_save, sender=UserProfile) def create_user_profile(sender, instance=None, **kwargs): try: print str(instance.bank_account) except: print 'No account' 

Я предпочел бы сделать что-то подобное, но получаю исключение, когда выполняется оператор if и объект не существует:

 @receiver(pre_save, sender=UserProfile) def create_user_profile(sender, instance=None, **kwargs): if instance.bank_account is None: print 'No account' else: print str(instance.bank_account) 

3 Solutions collect form web for “Тест Python, если объект существует”

Я предполагаю, что вы столкнулись с ошибкой BankAccount.DoesNotExist ? Если это так, вы можете изменить отношения между UserProfile и BankAccount . Посмотрите на билет Django № 10227, чтобы узнать, что здесь происходит.

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

Я предпочитаю ваш первый пример вашему второму, но, возможно, вы могли бы использовать hasattr(instance,'bank_account') в качестве защиты?

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

Я предполагаю, что ваш оператор if взрывается, когда instance is None ; решение состоит в том, чтобы добавить тест в оператор if, чтобы сначала проверить instance :

 if instance and instance.bank_account: print str(instance.bank_account) else: print 'No account' 

Если вы не знаете, существует ли поле, вы можете заменить instance.bank_account с помощью getattr(instance, 'bank_account', None) , который как извлекает значение, так и имеет дело с возможностью того, что атрибут не существует.

  • Идентификация Android с использованием JSON
  • Процесс Python продолжает расти в сценарии загрузки django db
  • Django ReportLab: использование объекта Drawing для создания PDF и возврата через Httpresponse
  • Django - Как создать классы ModelAdmin в доступных разрешениях
  • Как выполнить внутреннее соединение в django
  • Как переопределить поле родительского класса
  • Mix View и ViewSet в просматриваемом файле api_root
  • Django с использованием get_user_model vs settings.AUTH_USER_MODEL
  • Как создать список полей в формах django
  • Python / Django: войдите в консоль под управлением сервера задач, войдите в файл под Apache
  • Django: request.GET и KeyError
  •  
    Interesting Posts for Van-Lav

    Как вызвать метод из другого плана в Flask?

    Есть ли какой-нибудь модуль Python 3 для создания PDF-файлов?

    Единичное тестирование функции, возвращающей объект генератора

    pypdf Объединение нескольких PDF-файлов в один PDF-файл

    Python-Алгоритмическое утверждение

    Tried Python BeautifulSoup и Phantom JS: STILL не может очищать веб-сайты

    При доступе к Bigquery с использованием API Python в чем отличие использования API-интерфейса google и gcloud

    Как проверить, какое разрешение не удалось разрешить в пирамиде (пилоны 2)?

    Загрузка изображений из Google Search с помощью Python дает ошибку?

    Лучший способ построить угол между двумя линиями в Matplotlib

    Pandon Pandas – переупорядочивание столбцов в фрейме данных на основе имени столбца

    Вызов функций по индексу массива в Python

    Потребление COM-сервера Python от .NET

    Python 2 или Python 3? С чего мне начать?

    Как избежать Google Captcha с помощью PhantomJS (работающие частные прокси поймают его)

    Python - лучший язык программирования в мире.