-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Remove parentheses around multiple exception types on Python 3.14+ #20768
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great.
I just realized that we haven't updated our black tests in a while. It's something I normally do before working on preview styles because we then "inherit" the black tests
Would you mind updating the black tests in a separate PR that we can merge first to get more test coverage?
Updating is normally very smooth but you might run into problems if Black changed their test structure. All that's needed is to run
I believe it takes a path to black's checkout as an argument
Summary -- This PR implements the black preview style from psf/black#4720. As of Python 3.14, you're allowed to omit the parentheses around groups of exceptions, as long as there's no `as` binding: **3.13** ```pycon Python 3.13.4 (main, Jun 4 2025, 17:37:06) [Clang 20.1.4 ] on linux Type "help", "copyright", "credits" or "license" for more information. >>> try: ... ... except (Exception, BaseException): ... ... Ellipsis >>> try: ... ... except Exception, BaseException: ... ... File "<python-input-1>", line 2 except Exception, BaseException: ... ^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: multiple exception types must be parenthesized ``` **3.14** ```pycon Python 3.14.0rc2 (main, Sep 2 2025, 14:20:56) [Clang 20.1.4 ] on linux Type "help", "copyright", "credits" or "license" for more information. >>> try: ... ... except Exception, BaseException: ... ... Ellipsis >>> try: ... ... except (Exception, BaseException): ... ... Ellipsis >>> try: ... ... except Exception, BaseException as e: ... ... File "<python-input-2>", line 2 except Exception, BaseException as e: ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: multiple exception types must be parenthesized when using 'as' ``` <hr> We do a similar transformation for `with` statements after Python 3.8, so I took a lot of inspiration from that implementation. Test Plan -- New tests
c0ab9cb
to
04668e6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice. The most satisfying feeling ever when working on the formatter :)
Summary
This PR implements the black preview style from psf/black#4720. As of Python 3.14, you're allowed to omit the parentheses around groups of exceptions, as long as there's no
as
binding:3.13
3.14
I think this ended up being pretty straightforward, at least once Micha showed me where to start :)
Test Plan
New tests
At first I thought we were deviating from black in how we handle comments within the exception type tuple, but I think this applies to how we format all tuples, not specifically with the new preview style.