Background ("PEP 572 and decision-making in Python"):
replies(2):
yeah, if you code on 20 years old compilers with no warnings. GCC 4.1 warns about this (with -Wall) and Clang 3.4 warns about this too, without any warning flag.
You can require additional brackets around assignment if you use the returning value (or otherwise it's syntax error). They did that with the new one anyway.
They only did it if the := is at the root level. The following is completely legal:
if match := re.search(pat, text):
`print("Found:", match.group(0))
or [y := f(x), y**2, y**3]