Tôi đang viết một bài kiểm tra cho một chương trình sẽ được sử dụng trong nhiều ngôn ngữ. Trong khi chạy thử nghiệm bằng tiếng Đức, tôi đã nhận lỗiTại sao Python lưu các chuỗi định dạng thời gian của tiếng Đức và tiếng Tây Ban Nha (và khác?) Thành% T trong mô-đun ngôn ngữ?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/_strptime.py", line 454, in _strptime_time
return _strptime(data_string, format)[0]
File "/usr/local/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'T' is a bad directive in format '%T'
Đào vào điều này, tôi phát hiện ra rằng việc sử dụng locale.nl_langinfo(locale.T_FMT)
trong khi ở Đức hoặc Tây Ban Nha (và các ngôn ngữ có khả năng khác) tạo ra chuỗi định dạng '%T'
. Điều này không được công nhận trong time
module.
Tài liệu trên locale
tại python.org không đề cập đến bất kỳ điều gì về việc trả lại '%T'
. Tham chiếu duy nhất đến '%T'
tôi có thể tìm thấy bất kỳ nơi nào trong phản hồi với a separate StackOverflow question. Từ bài đăng và ngữ cảnh đó, tôi giả định '%T'
là viết tắt của '%H:%M:%S'
.
Câu hỏi của tôi là, làm thế nào để xử lý các miền địa phương mà locale
sẽ trở lại '%T'
cho chuỗi định dạng của nó mà không làm một cái gì đó giống như
if fmt_str == '%T':
fmt_str = '%H:%M:%S'
để xử lý những trường hợp này?
+1 Rất lạ. Một lỗi mô-đun tiêu chuẩn ra vô điều kiện, với một thông báo lỗi sucksy, đơn giản chỉ vì một sự thay đổi miền địa phương? – delnan
Sự cố có vẻ là hai mô-đun không giao tiếp với nhau và 'miền địa phương' bắt đầu sử dụng tốc ký mà' thời gian' không nhận ra. Điều này rất kỳ lạ, bởi vì cả hai đều phải tuân theo tiêu chuẩn 'ngày 'thống nhất; 'locale' thực hiện trong khi' time' dường như không. – Staunch
Không phải là môi trường cục bộ của tôi hỗ trợ '% T', đó là' locale' sử dụng '% T' làm viết tắt cho'% H:% M:% S' nhưng 'time' thì không.Các từ viết tắt trong 'locale' khớp với các định dạng của hàm ngày tháng của Unix (để xem chúng, gõ' date --h' tại dòng lệnh), nhưng 'time' sử dụng một danh sách các từ viết tắt. Đối với bản ghi, '% X' sẽ hoạt động, nhưng đó không phải là những gì đang được trả về bởi' locale'. – Staunch