2016-12-26 25 views
13

f-string là một trong những tính năng mới trong Python 3.6.Tại sao biểu tượng '{' vẫn còn khi f " {10}" được đánh giá bằng Python 3.6?

Nhưng khi tôi cố gắng này:

>>> f"\{10}" 
'\\{10' 

tôi không thể tìm ra lý do tại sao trái xoăn cú đúp '{' vẫn trong kết quả. Tôi nghĩ rằng kết quả sẽ tương tự với str.format:

>>> "\{}".format(10) 
'\\10' 

Trong PEP-0498 nó không trả lời câu này một cách rõ ràng. Vì vậy, nguyên nhân khiến cặp ngoặc nhọn bên trái '{' vẫn còn trong kết quả và nguyên nhân gây ra sự khác biệt này giữa f-stringstr.format() là gì?

Trả lời

13

Đây là lỗi. Một cách tiếp cận mà hiện đang hoạt động là sử dụng Unicode đen \u005c cho \ thay vì:

>>> f'\u005c{10}' 
'\\10' 

hay, với một hiệu ứng tương tự, sử dụng một liệu f -string:

>>> rf'\{10}' 
'\\10' 

Bằng cách sử dụng '\' có vẻ như hai điều kỳ lạ xảy ra cùng một lúc:

  • Ký tự tiếp theo ('{' đây) đã được thoát, để trong chuỗi kết quả.
  • Chuỗi định dạng cũng là đánh giá, đó là số lẻ và không mong đợi

Trường hợp tại điểm:

>>> f'\{2+3}' 
'\\{5' 
>>> a = 20 
>>> f'\{a+30}' 
'\\{50' 

Dù bằng cách nào, tôi sẽ điền vào một báo cáo lỗi sớm (vì tôi thấy bạn chưa có) và cập nhật khi tôi nhận được thư trả lời.

Cập nhật: Đã tạo Issue 29104 -- Left bracket remains in format string result when '\' preceeds it, nếu bạn quan tâm hãy xem cuộc hội thoại ở đó.

Cập nhật 2: Sự cố được giải quyết với PR 490.

Các vấn đề liên quan