Тест 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) , который как извлекает значение, так и имеет дело с возможностью того, что атрибут не существует.

Interesting Posts

Как создать форму Django, которая отображает метку флажка справа от флажка?

Как заменить столбец с помощью встроенного модуля записи .csv Python?

Объединение двух одномерных массивов NumPy

RabbitMQ / Celery с Django зависает при задержке / готовность / etc – нет полезной информации о журнале

Ошибка xlПример не определен в Python win32com

Как пользоваться красивым супом python, чтобы получить только уровень 1 navigableText?

cx_Oracle с несколькими версиями клиента Oracle

Преобразование серий pandas из строки в уникальный int id

Несбалансированная классификация с использованием RandomForestClassifier в sklearn

Pip или easy_install с Python 3.x взрываются при установке чего-либо с помощью mingw

Передайте несколько параметров concurrent.futures.Executor.map?

В чем разница между префиксом u и префиксом unicode () в python?

лямбда и понимание по спискам

Преобразовать обратную косую черту для прокрутки в python

Список Python для хранения экземпляра класса?

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