Làm cách nào để ngăn chặn việc xóa bỏ ràng buộc tên của Python, khi tên đó là được sử dụng để ràng buộc ngoại lệ bị bắt? Khi nào thì thay đổi này trong hành vi có trong Python?Ràng buộc tên trong mệnh đề `except` bị xóa sau mệnh đề
Tôi viết mã để chạy trên cả hai Python 2 và Python 3:
exc = None
try:
1/0
text_template = "All fine!"
except ZeroDivisionError as exc:
text_template = "Got exception: {exc.__class__.__name__}"
print(text_template.format(exc=exc))
ý rằng exc
là ràng buộc rõ ràng trước việc xử lý ngoại lệ, vì vậy Python biết nó là một cái tên trong phạm vi bên ngoài.
Mở Python 2.7, này chạy tốt và tên exc
sống sót được sử dụng trong các format
gọi ::
Got exception: ZeroDivisionError
Tuyệt vời, đây chính xác là những gì tôi muốn: Mệnh đề except
liên kết tên và Tôi có thể sử dụng tên đó trong phần còn lại của hàm để tham chiếu đến đối tượng ngoại lệ .
Mở Python 3.5, cuộc gọi format
thất bại bởi vì rõ ràng là exc
ràng buộc được xóa ::
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NameError: name 'exc' is not defined
Tại sao exc
ràng buộc xóa khỏi phạm vi bên ngoài? Làm cách nào để chúng tôi có nghĩa là để bảo vệ tên ràng buộc một cách đáng tin cậy khi sử dụng nó sau khi các yêu cầu except
?
Khi nào thay đổi này được đưa vào Python, tài liệu được viết ở đâu?
Tôi có quyền báo cáo điều này dưới dạng lỗi trong Python 3 không?
Điều này có vẻ như mong muốn. Nếu bạn gán 'exc' cho một biến khác trong mệnh đề' except', bạn có thể lấy nó ở đó. Có thể sao chép https://stackoverflow.com/questions/29268892/python-3-exception-deletes-variable-in-enclosing-scope-for-unknown-reason Tôi biết tôi nên đã thực hiện câu trả lời này ... lol –