2012-10-18 22 views
11

Tôi đang sử dụng python-dateutil cho phân tích một ngày từ một chuỗi:Rắc rối trong ngày phân tích cú pháp sử dụng dateutil

import dateutil.parser 
print dateutil.parser.parse('some null string', fuzzy=True).date() 
2012-10-18 
print dateutil.parser.parse('some 31 Oct 2012 string', fuzzy=True).date() 
2012-10-31 

Những gì tôi mong đợi là cho dateutil.parser.parse('some null string', fuzzy=True).date() để ném một ngoại lệ, nhưng nó trở về ngày hiện tại. Ai đó có thể chỉ cho tôi cách tôi có thể tránh nhận ngày hiện tại, nếu không có ngày nào được tìm thấy trong chuỗi được cung cấp không?

Xin cảm ơn trước.

+1

Nếu bạn bật 'mờ ', bạn sẽ không bao giờ nhận được ngoại lệ ... –

Trả lời

14

Xem dateutil docs, đặc biệt là chức năng phân tích cú pháp (nhấn mạnh của tôi):

Bên cạnh đó, các đối số từ khóa sau đây có sẵn:

mặc định Nếu đưa ra, đây phải là một trường hợp datetime. Bất kỳ trường nào bị thiếu trong ngày được phân tích cú pháp sẽ được sao chép từ trường hợp này. Giá trị mặc định là ngày hiện tại, tại 00:00:00.

... (ảnh chụp) ...

mờ Nếu mờ được thiết lập là True, thẻ vô danh trong chuỗi sẽ được bỏ qua.

Cho rằng bạn đã đặt fuzzy thành True, không có ngoại lệ nào sẽ bị ném vì chỉ đơn giản là bỏ qua tất cả các mã thông báo không xác định. Và, vì đối số default không được chuyển, ngày hiện tại sẽ được trả lại.

Vì vậy, giải pháp sẽ là giữ fuzzy đặt thành False, để các chuỗi định dạng không hợp lệ sẽ ném một ngoại lệ; hoặc kiểm tra xem ngày giờ trả về có bằng với ngày hiện tại lúc 00:00:00 làm chỉ báo chuyển đổi không thành công hay không.

+2

Điều này không còn đúng, như v.2.5.0. Nếu không tìm thấy ngày nào, ngay cả khi phân tích cú pháp mờ, 'ValueError' sẽ được nâng lên. – Paul

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