2012-07-19 17 views
9

Django đang cho tôi một số cảnh báo thời gian chạy (trên mã mà tôi không viết).Django: làm thế nào để có được dấu vết ngăn xếp cho các cảnh báo thời gian chạy

Làm cách nào tôi có thể tải Django để cho tôi một stacktrace, vì vậy tôi có thể thấy những gì đang gây ra những điều này?

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py:808: 
RuntimeWarning: DateTimeField received a naive datetime (2012-07-19 09:36:16.161479) 
while time zone support is active. 
    RuntimeWarning 
+1

đã trả lời của tôi trả lời câu hỏi của bạn? – dalore

+0

Hey về chấp nhận một câu trả lời ít nhất. – dalore

+0

Xin chào, xin lỗi, tôi chỉ nhìn thấy câu trả lời của bạn. – fadedbee

Trả lời

14

Từ các tài liệu tại địa chỉ: https://docs.djangoproject.com/en/1.10/topics/i18n/timezones/#code

Trong phát triển, bạn có thể tắt cảnh báo như vậy vào trường hợp ngoại lệ và có được một traceback bằng cách thêm dòng sau vào tập tin cài đặt của bạn:

import warnings 
warnings.filterwarnings(
    'error', r"DateTimeField .* received a naive datetime", 
    RuntimeWarning, r'django\.db\.models\.fields') 
-3

nguồn của Django sẽ cho bạn biết những gì vừa xảy ra:

def get_prep_value(self, value): 
    value = self.to_python(value) 
    if value is not None and settings.USE_TZ and timezone.is_naive(value): 
     # For backwards compatibility, interpret naive datetimes in local 
     # time. This won't work during DST change, but we can't do much 
     # about it, so we let the exceptions percolate up the call stack. 
     warnings.warn(u"DateTimeField received a naive datetime (%s)" 
         u" while time zone support is active." % value, 
         RuntimeWarning) 
     default_timezone = timezone.get_default_timezone() 
     value = timezone.make_aware(value, default_timezone) 
    return value 
+1

Cảm ơn, nhưng tôi biết điều này. Tôi đang tìm những gì gây ra cảnh báo thời gian chạy. Đây không phải là người duy nhất ... – fadedbee

1

Bạn có thể thực hiện một định dạng đăng nhập của bạn và đặt dấu vết trở lại cho thông điệp cảnh báo trong các bản ghi sử dụng traceback.print_exception().

Tham khảo tài liệu Fomatter tại FormatException

Bạn cũng có thể tham khảo này, How do I use Django's logger to log a traceback when I tell it to?

+0

Nó không phải là một ngoại lệ, chỉ là một cảnh báo. Điều này có hiệu quả không? – fadedbee

+0

@chrisdew, tôi chưa thử, nhưng tôi đoán nên làm việc. – Rohan

-2

Điều này có nghĩa rằng bạn đã kích hoạt hỗ trợ múi giờ trong django; nhưng bạn đã vượt qua nó một đối tượng datetime mà không có bất kỳ thông tin múi giờ nào gắn liền với nó.

Nếu bạn muốn hỗ trợ múi giờ của django, thì đối tượng datetime được sử dụng phải là nhận biết múi giờ.

documentation on timezone support cung cấp cách để biến đối tượng ngày giờ của bạn thành đối tượng có dấu thời gian.

+1

Cảm ơn, nhưng tôi biết điều này. Tôi đang tìm những gì gây ra cảnh báo thời gian chạy. Đây không phải là người duy nhất ... – fadedbee

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