>To be fair, the adorable `except:` black magic exists there to be used in such a case. Of course its use is extremely dangerous for obvious reasons (it even catches the `SystemExit` exception!), so I can understand why the author didn't mention this.
This is why you use "except Exception:" which doesn't catch system exceptions.
I think the point was (and I'm extrapolating here) that `except:` exists at all, and doesn't require any special foresight to use. That compared to Rust, which thinks about safety first.
"except Exception:" is rarely what you want IMO. It also catches SyntaxError, which is almost always a design error -- one you'd typically prefer would halt the system.
Unfortunately there's no common parent to EnvironmentError/SystemError/RuntimeError/etc that excludes SyntaxError.
SyntaxError can happen as a consequence of loading a module (hitting an import statement, etc). But for a simpler example, replace SyntaxError with NameError and it's still almost always a design error that you probably have no sane way to handle in an exception handler (other than to mask the problem).
Python's a very dynamic language and so of course you could come up with examples to the contrary (ones where the user input could trigger SyntaxError or NameError).
But the only universally good reason I know of where you should be wrapping imports in try except is 2/3 compatibility or other module/library import fallback. For these you need to be catching syntaxerror and other system errors.
This is why you use "except Exception:" which doesn't catch system exceptions.