Specialize syntax error for assignment expressions in invalid places
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Feature or enhancement
Proposal:
There are a few places where (unparenthesized) assignment expressions are not accepted but users might think of using them. For example:
>>> func(arg=x := foo())
File "<python-input-0>", line 1
func(arg=x := foo())
^^
SyntaxError: invalid syntax
I find this error pretty confusing. It's not clear why this is a syntax error or what users should do it fix it (i.e. add parentheses).
I propose adding a specialized syntax error to point users in the right direction, similar to what's currently done for assert:
>>> assert x := 1
File "<python-input-12>", line 1
assert x := 1
^^^^^^
SyntaxError: cannot use named expression without parentheses here
Refs #138716, #146260
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện các ví dụ trong issue và đọc cách CPython xử lý lỗi cú pháp đối với assignment expressions, rồi so sánh với chẩn đoán chuyên biệt hiện có cho assert. Công việc được xem là hoàn tất khi các assignment expressions không hợp lệ, không có dấu ngoặc, nhận được một thông báo rõ ràng hướng người dùng đến việc sử dụng dấu ngoặc, trong khi các dạng hợp lệ vẫn giữ nguyên hành vi hiện có.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- compilers
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 58/100