2016-07-01 9 views
-1

mein aktueller Code ist wie unten, ich benutze versuchen und außer die Ausnahme von der Indexierung der Liste zu übergeben, könnte die Länge von "Text" manchmal weniger als 3 sein. Ich suche einen schöneren Weg. Bitte lassen Sie mich Ihre Idee wissen, danke. HierPython Index Problem, auf der Suche nach hübscheren Code

for item in items: 
    text = item.splitlines() 
    try: 
    name = text[0] 
    except: 
    name = "" 

    try: 
    tag = text[1] 
    except: 
    tag = "" 

    try: 
    age = text[2] 
    except: 
    age = "" 
+0

verwenden wenn Statements um die Länge der Liste zu überprüfen 'if len (text)> 0: name = text [0]' – ritlew

+4

"Pretty" ist meinungsbasiert. Wie sollen wir wissen, was Sie für einen schönen Code halten? –

+0

Oder drei Zeilenvorschubzeichen vor dem Teilen in die Zeichenfolge. So etwas wie 'name, tag, age = (Element + '\ n \ n \ n'). Splitlines() [: 3]' würde funktionieren, oder 'name, tag, age = (item.splitlines() + [' ',' ',' ']) [: 3] '. – jonrsharpe

Antwort

3

ist eine Methode:

text = item.splitlines() 
name, tag, age = (text + [""] * 3)[:3] 
+0

Vielen Dank, es sieht hübscher für mich aus. – tfchen

0

itertools hat izip_longest():

keys = ['name', 'tag', 'age'] 
name, tag, age = (item[1] for item in izip_longest(keys, text, fillvalue="")) 

Argumentieren, das viel nützlicher ist praktisch, wenn Sie eine dict:

dict(izip_longest(keys, text, fillvalue="")) 
+1

Du könntest auch 'item for _, item in izip_longest (...)' – jonrsharpe

+1

@jonrsharpe Du kannst nicht wirklich entscheiden, welches hier hässlicher ist. – dhke

Verwandte Themen