Try/except is not an antipattern, although it is probably an antipattern to turn an error condition into a boolean. But this happens in both examples, so that is a separate question.

Both status codes and exceptions are valid ways to handle HTTP error responses. The choice is a question of abstraction level. 

If you are writing networking-level code (e.g. a proxy server), you probably want to treat all status codes on the same level of abstraction.

If you are writing application level code, e.g some business logic which perform HTTP requests to fetch data, you want to separate network-level error conditions from the regular application logic, and exceptions are appropriate.