В Python вы не можете быть неоднозначным по этому поводу. Либо у вас есть
if (x > 0):
if (y > 0):
print "hello"
else:
print "world"
или
if (x > 0)
if (y > 0)
print "hello"
else:
print "world"
Отступ показывает, какое «если» соответствует «другому». [Примечание: как ни старайся, я не могу заставить «else» в первом примере правильно выстроиться под первым «if».]
На всех языках, которые я видел, которые допускают эту конкретную двусмысленность, "else" совпадает с самым последним "if". Это может быть не верно для всех языков, которые когда-либо существовали. Обычно при написании синтаксического анализатора проще всего сопоставить «else» с ближайшим «if» в стеке.
Аналогичный вопрос: каков результат 5 - 2 + 1? Это 4 или 2? Лично я всегда использую скобки, когда пишу (x - y) + z или x - (y + z), потому что я никогда не могу вспомнить, каким образом пойдет парсер.