2016-06-04 6 views
0

Was ist eine mehr Python Art, diese Aussage zu schreiben?Optimieren Sie Python If-Anweisung

if soup.find(title="Email"): 
    profile['email'] = soup.find(title="Email").a.string 

Was ich will, vermeiden, ist die Wiederholung soup.find(title="Email")

+1

Dann extrahieren Sie es in eine Variable; Dies ist kein Python-Problem, es ist für fast jede Sprache dasselbe. – jonrsharpe

Antwort

3

Ich weiß nicht, ob dies mehr pythonic ist. Ich mache das mit den meisten Sprachen, die ich benutze. Auf meinem Kopf sollte so etwas die Wiederholung vermeiden.

soupByEmail = soup.find(title="Email") 
if soupByEmail: 
    profile['email'] = soupByEmail.a.string 
+0

Sie haben zwei Wenns verwendet und selbst wenn Sie es nicht hätten, wäre es nicht gültig. Du denkst an Ruby. –

+0

@AlexHall Ah ja, das funktioniert nur, wenn es auch eine andere Bedingung gibt. 'profile ['email'] = suppleByEmail.a.string wenn suppyByEmail sonst" " Wird bearbeiten. –

0

Es geht nicht um Pythonic, es geht eher um Coding Style. Und als elegante Alternative verwenden Sie EAFP principle (Einfachere um Vergebung zu bitten als um Erlaubnis) und wickeln Sie Ihre Schnipsel mit einem try-except Ausdruck:

try: 
    profile['email'] = soup.find(title="Email").a.string 
except Exception as exp: 
    # do what you want with exp 

Ein weiterer Vorteil dieses Ansatzes ist, dass Sie die Probleme in Ihrem Ausnahmeblock anmelden können, für späteren Gebrauch, oder drucken Sie dann in stdout.

+3

Der ursprüngliche Code, der speziell zwischen 'find' und einem passenden Objekt mit dem entsprechenden' a' Attribut und (vermutlich) 'None' unterschieden wird. Sie können dies auch hier tun, indem Sie 'AttributeError', nicht' Exception' fangen. – chepner

+0

@chepner Vielleicht, aber da es eine Menge Ausnahme in dieser Zeile geben würde, kann ich mich nicht auf das verlassen, was ich nicht 100% sicher bin, auch OP erklärt den Code nicht vollständig. – Kasramvd

+0

"Optimieren" bedeutet im Allgemeinen, dass das OP nach Code fragt, der dasselbe wie sein Code tut, und dies erfüllt diese Anforderung nicht. – Kevin