Có một vấn đề đáng kể với một số câu trả lời được đăng cho đến nay:
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
0 giải mã từ mã hóa mặc định, thường là ASCII; Trên thực tế, Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
0 cố gắng làm cho "ý nghĩa" của các byte được đưa ra bằng cách chuyển đổi chúng thành các ký tự. Do đó, mã sau, về cơ bản là những gì được đề xuất bởi các câu trả lời trước đó, không thành công trên máy của tôi:# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format[unicode[author]]
gives:
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
Thất bại xuất phát từ thực tế là
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
2 không chỉ chứa các byte ASCII [tức là với các giá trị trong [0; 127]] và Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
0 giải mã từ ASCII theo mặc định [trên nhiều máy].Một giải pháp mạnh mẽ là cung cấp rõ ràng cho mã hóa được sử dụng trong các trường của bạn; Lấy UTF-8 làm ví dụ:
u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
[hoặc không có
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
4 ban đầu, tùy thuộc vào việc bạn muốn kết quả Unicode hay chuỗi byte].Tại thời điểm này, người ta có thể muốn xem xét có các trường
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
2 và Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
6 là chuỗi unicode, thay vì giải mã chúng trong quá trình định dạng. \ [\ newcommand {l} [1] {\ | #1 \ |} \ newcommand {vl} [1] {\ l {\ vec Re} \, [#1]} \ newCommand {i} [1] {\ operatorName {im} \, [#1]} \]
Tùy chọn 1 - Phương thức chuỗi Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
7
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
Bạn có thể sử dụng phương thức Chuỗi
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
7 để tạo các chuỗi mới với các giá trị được chèn. Phương pháp này hoạt động cho tất cả các bản phát hành hiện tại của Python. Ở đây chúng tôi chèn một chuỗi vào một chuỗi khác:>>> shepherd = "Mary" >>> string_in_string = "Shepherd {} is on duty.".format[shepherd] >>> print[string_in_string] Shepherd Mary is on duty.
Các niềng răng xoăn cho thấy giá trị chèn nên đi.
Bạn có thể chèn nhiều hơn một giá trị. Các giá trị không phải là chuỗi, chúng có thể là số và các đối tượng Python khác.
>>> shepherd = "Mary" >>> age = 32 >>> stuff_in_string = "Shepherd {} is {} years old.".format[shepherd, age] >>> print[stuff_in_string] Shepherd Mary is 32 years old.
>>> 'Here is a {} floating point number'.format[3.33333] 'Here is a 3.33333 floating point number'
Bạn có thể thực hiện định dạng phức tạp hơn của các số và chuỗi bằng cách sử dụng các tùy chọn định dạng trong dấu ngoặc xoăn - xem tài liệu về định dạng chuỗi giòn xoăn.
Hệ thống này cho phép chúng tôi cung cấp các hướng dẫn định dạng cho những thứ như số, bằng cách sử dụng
Traceback [most recent call last]:
File "test.py", line 3, in
print '{0}'.format[unicode[author]]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range[128]
9 bên trong niềng răng xoăn, theo sau là các hướng dẫn định dạng. Ở đây chúng tôi yêu cầu in bằng số nguyên [u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
0] trong đó số lượng phải được chuẩn bị với u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
1 để lấp đầy chiều rộng trường của u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
2:>>> print["Number {:03d} is here.".format[11]] Number 011 is here.
Điều này in một giá trị điểm nổi [
u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
3] với chính xác u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
4 chữ số sau điểm thập phân:>>> 'A formatted number - {:.4f}'.format[.2] 'A formatted number - 0.2000'
Xem tài liệu định dạng chuỗi Python để biết thêm chi tiết và ví dụ.
Tùy chọn 2 - F -String trong Python> = 3.6¶
Nếu bạn có thể phụ thuộc vào việc có Python> = Phiên bản 3.6, thì bạn có một tùy chọn hấp dẫn khác, đó là sử dụng cú pháp theo nghĩa đen [F-String] được định dạng mới để chèn các giá trị biến. Một
u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
3 khi bắt đầu chuỗi cho Python cho phép bất kỳ tên biến hợp lệ hiện tại làm tên biến trong chuỗi. Ví dụ: đây là một ví dụ như ở trên, sử dụng cú pháp F-String:>>> shepherd = "Martha" >>> age = 34 >>> # Note f before first quote of string >>> stuff_in_string = f"Shepherd {shepherd} is {age} years old." >>> print[stuff_in_string] Shepherd Martha is 34 years old.
Tùy chọn 3 - Định dạng trường học cũ % cũ
Có một phương thức định dạng chuỗi cũ hơn sử dụng toán tử
u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
6. Nó kém linh hoạt hơn một chút so với hai tùy chọn khác, nhưng bạn vẫn sẽ thấy nó được sử dụng trong mã cũ hơn và khi sử dụng định dạng u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
6 là ngắn gọn hơn.Đối với toán tử
u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
6 hình thành, bạn hiển thị nơi các giá trị được chèn sẽ đi bằng ký tự u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
6 theo sau là một định dạng định dạng, để nói làm thế nào giá trị nên được chèn.Dưới đây là ví dụ trên, sử dụng định dạng
u'{0} in {1}'.format[unicode[self.author, 'utf-8'], unicode[self.publication, 'utf-8']]
6. Lưu ý điểm đánh dấu >>> shepherd = "Mary" >>> string_in_string = "Shepherd {} is on duty.".format[shepherd] >>> print[string_in_string] Shepherd Mary is on duty.1 để chèn một chuỗi và điểm đánh dấu
>>> shepherd = "Mary" >>> string_in_string = "Shepherd {} is on duty.".format[shepherd] >>> print[string_in_string] Shepherd Mary is on duty.2 để chèn một số nguyên.
>>> stuff_in_string = "Shepherd %s is %d years old." % [shepherd, age] >>> print[stuff_in_string] Shepherd Martha is 34 years old.