Diskuze: "Špatné" odsazení

Python Python "Špatné" odsazení

Avatar
jan.ruzicka01
Redaktor
Avatar
jan.ruzicka01:

Ahoj,
mám problém s odsazením. Když tento Pythonovský skript (jeho část) spustím v command-line pythonu, vždy mi vyhodí 'IndentationError: unindent does not match any outer indentation level'. Ale přitom je odsazení správné, takže nevím, čím to je.
Zde je kód:

def tokType(token):
        if type(token) is str:
                if ":" in token:
                        out = ""
                        for c in token:
                                if c == ":":
                                        break
                                out += c
                        return out
                else:
                        return None
    elif type(token) is list:
        for i, t in enumerate(token):
            if i != 0 and tokType(t) != tokType(token[i-1]):
                return "multi"
        return tokType(token[0])
        else:
                raise TypeError("Unsupported type {0}, expecting List or String!".format(type(token)))

Za každou radu jsem vděčný

Odpovědět 28.3.2015 18:17
';' je má jediná noční můra...
Avatar
Odpovídá na jan.ruzicka01
Neaktivní uživatel:
def tokType(token):
    if type(token) is str:
        if ":" in token:
            out = ""
            for c in token:
                if c == ":":
                    break
                out += c
            return out
        else:
            return None
    elif type(token) is list:
        for i, t in enumerate(token):
            if i != 0 and tokType(t) != tokType(token[i-1]):
                return "multi"
        return tokType(token[0])
    else:
        raise TypeError("Unsupported type {0}, expecting List or String!".format(type(token)))

Takto by to malo byť správne odsadené

Editováno 28.3.2015 18:43
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 28.3.2015 18:42
Neaktivní uživatelský účet
Avatar
hanpari
Redaktor
Avatar
Odpovídá na jan.ruzicka01
hanpari:

Ahoj,
ze cvičných důvodů jsem zkusil pochopit, co ta funkce dělá a pak jsem ji trochu přepsal:

def tokType1(t):
    if isinstance(t, (str, list)):
        try:
            return t[:t.index(":")] if t.find(":")>-1 else None
        except AttributeError:
            return "multi" if len(set(map(tokType, t)))> 1 else tokType(t[0])
    raise TypeError("Unsupported type %s, expecting List or String!" %type(t))

Snažil jsem se ten kód trochu "vysušit", hlavně omezit počty podmínek a returnů.

Celý kód i s jednoduchou kontrolou proti tvojí funkce je tady:
http://pastebin.com/EC7vcfLG
Nenarazil jsem na žádný problém, ale nevím, k čemu to potřebuješ :)

Editováno 28.3.2015 22:40
 
Nahoru Odpovědět  +1 28.3.2015 22:39
Avatar
jan.ruzicka01
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
jan.ruzicka01:

Jo, už jsem si všiml, že se editor rozhodl změnit ze Soft Tabs zpátky na Hard Tabs. Už jsem to vyřešil.

Nahoru Odpovědět 29.3.2015 9:03
';' je má jediná noční můra...
Avatar
jan.ruzicka01
Redaktor
Avatar
Odpovídá na hanpari
jan.ruzicka01:

Jo, dík, ale asi zůstanu u Python-like zápisu. Každopádně jsem trochu sloučil ty Ify.

Nahoru Odpovědět 29.3.2015 9:06
';' je má jediná noční můra...
Avatar
hanpari
Redaktor
Avatar
Odpovídá na jan.ruzicka01
hanpari:

V pohodě, jak jsem psal, já to psal kvůli sobě. Mimochodem, nechceš přispět:

http://www.itnetwork.cz/…517b24594cd8

Založil jsem vlákno, abych zjistil, co si každý představuje pod "python-like".

 
Nahoru Odpovědět 29.3.2015 10:08
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.