객체가 존재하는지 Python 테스트
-
13-12-2019 - |
문제
나는 try를 사용하는 것이 나쁜 스타일이라고 생각합니다.제외하고:흐름 제어를 위한 것이지만 Django에 DB 필드가 있는지 테스트하기 위해 다음 코드를 작성하는 방법을 알 수 없습니다.이것은 작동하는 "더티" 코드입니다:
@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)
해결책
나는 당신이 BankAccount.DoesNotExist
오류?그렇다면 두 사람의 관계를 역전시킬 수 있다. UserProfile
그리고 BankAccount
.보세요 장고 티켓 #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)
, 둘 다 값을 검색하고 속성이 존재하지 않을 가능성을 처리합니다.