Incorrect SyntaxError location for walrus operator in multi-line conditional expression
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ả
Bug report
Bug description:
When using the walrus operator (:=) inside a multi-line conditional expression, Python raises a SyntaxError with the error position pointing to the wrong location.
The caret (^) is shown under the expression body instead of the if clause where the syntax issue actually occurs, making debugging misleading.
The error indicator should instead highlight the if portion (or walrus usage context), not the preceding expression line.
Code
(
1
if x := True
else 2
)
Traceback
File "[REDACTED]", line 2
1
^
SyntaxError: expected 'else' after 'if' expression
It locates error to 1 but it should have located to if x := True (line no. 3)
It does not errors when condition is parenthesized:
(
1
if (x := True)
else 2
) # output: 1
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Linked PRs
- gh-146305
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
Tái hiện biểu thức điều kiện nhiều dòng và biến thể có đặt trong dấu ngoặc của nó trên CPython 3.14, sau đó truy vết cách xử lý vị trí của parser hoặc lỗi cú pháp đối với biểu thức walrus. Được xem là hoàn tất khi dấu mũ trỏ đến dòng if x := True, trong khi trường hợp có đặt trong dấu ngoặc vẫn tiếp tục được phân tích cú pháp chính xác và báo cáo kết quả của nó.
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
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100