2014-07-15 42 views
1

我有一個Python腳本,選擇用戶的電子郵件。簡單的Python腳本爲大衆電子郵件退出

optouts = [ 
"[email protected]", 
"[email protected]", 
"[email protected]", 
] 

for email in optouts: 
    user = User.objects.get(email=email) 
    profile = user 
    profile.allow_mass_mails = False 
    profile.save() 
    print email, "opted out." 


print "done." 

大約有10,000封電子郵件正在退出。然而,當它發現被綁定到已刪除帳戶的電子郵件,它說:

django.contrib.auth.models.DoesNotExist: User matching query does not exist.

我想它說「跳」(如它打印完成的),如果用戶配置文件不存在。

我嘗試添加「其他打印‘跳過’,但沒有奏效。我是新來的Python和任何幫助表示讚賞。

回答

2

您可以捕獲該異常,並使用continue跳過記錄。無論是使用異常的模型對象本身,User.DoesNotExist

for email in optouts: 
    try: 
     user = User.objects.get(email=email) 
    except User.DoesNotExist: 
     print email, "skipped." 
     continue 
    profile = user 
    profile.allow_mass_mails = False 
    profile.save() 
    print email, "opted out." 

或通過顯式導入基本異常,django.core.exceptions.ObjectDoesNotExist

from django.core.exceptions import ObjectDoesNotExist 

for email in optouts: 
    try: 
     user = User.objects.get(email=email) 
    except ObjectDoesNotExist: 
     print email, "skipped." 
     continue 
    profile = user 
    profile.allow_mass_mails = False 
    profile.save() 
    print email, "opted out." 
+0

我知道這是正確的!現在我收到錯誤:NameError:name'django'未定義。 –

+0

@StevensonPrescott這意味着您必須正確導入'DoesNotExist'異常類。似乎你甚至不會在這裏導入'django'。這個文件中的導入如何看起來像? – famousgarkin

+0

from django.contrib.auth.models import用戶(然後在一個新行:)從company.models導入 import UserProfile –