AttributeError: у объекта 'module' нет атрибута 'strptime' - возможная ошибка? - PullRequest
8 голосов
/ 07 февраля 2012

Я немного сбит с толку относительно того, почему я получаю ошибку AttributeError: у объекта 'module' нет атрибута 'strptime'. Когда я импортирую datetime в своем скрипте Python и вызываю datetime.datetime.strptime (строка, формат), все работает нормально, но когда я пишу из datetime, импортирую datetime и вызываю datetime.strptime (string, format), мой скрипт вылетает с вышеуказанной ошибкой. Я в порядке, используя импорт datetime и вызывая datetime.datetime, но мне все еще интересно, почему из datetime происходит сбой datetime при вызове datetime.strptime (string, format). Есть идеи, почему это может происходить? Мой код ниже ...

Bulkolader.yaml

python_preamble:
- import: re
- import: base64

- import: hs_transformers

- import: google.appengine.ext.db
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard

- import: google.appengine.api.datastore


transformers:

- kind: HBO
  connector: csv

  property_map:
    - property: __key__
      external_name: swfServerID
      import_transform: hs_transformers.string

    - property: IP_address
      external_name: IP
      import_transform: hs_transformers.string

    - property: name
      external_name: swfServer
      import_transform: hs_transformers.swfServer

    - property: checkin
      external_name: clockStampOfLastCheckin
      import_transform: hs_transformers.date_time

    - property: update
      external_name: clockStampOfLastUpdate
      import_transform: hs_transformers.clockStampOfLastUpdate

    - property: form_factor
      external_name: formFactor
      import_transform: hs_transformers.string

    - property: serial_number
      external_name: serialNumber
      import_transform: hs_transformers.string

    - property: reverse_SSH
      external_name: allowReverseSSH
      import_transform: hs_transformers.boolean

    - property: insight_account
      external_name: FK_insightAccountID
      import_transform: hs_transformers.integer

    - property: version
      external_name: ver
      import_transform: hs_transformers.string

hs_transformers.py

import re
import logging
from datetime import datetime
from shared.datastore import *
import google.appengine.ext.bulkload.transform
from google.appengine.api import memcache


def clockStampOfLastUpdate(passed_clockstamp):
    try:
        if passed_clockstamp != "NULL":
            datetime_object = date_time(passed_clockstamp)
            return_file_update = memcache.get(str(datetime_object), namespace = "HBOImport")

            if not return_file_update:
                return_file_update = FileUpdate.lastBefore(datetime_object)
                memcache.set(str(datetime_object), return_file_update, namespace = "HBOImport", time = 20)

            if return_file_update != None: return return_file_update.key()
    except Exception, e: 
        logging.error(e)


def string(passed_string):
    try: 
        if passed_string != "NULL": return passed_string
    except Exception, e: 
        logging.error(e)


def swfServer(passed_url):
    try:
        if passed_url != "NULL": return passed_url.split('//', 1)[1].split('.')[0]
    except Exception, e: 
        logging.error(e)


def date_time(passed_datetime):
    try:
        if passed_datetime != "NULL": return datetime.strptime(passed_datetime, '%m/%d/%y %H:%M')
    except Exception, e: 
        logging.error(e) 


def boolean(passed_boolean):
    try:
        if passed_boolean != "NULL": 
            if passed_boolean == "T": return True
            if passed_boolean == "F": return False
    except Exception, e: 
        logging.error(e)


def integer(passed_integer):
    try:
        if passed_integer != "NULL": return int(passed_integer)
    except Exception, e: 
        logging.error(e)

Ошибка CMD ...

Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Jack Frost>cd "C:\Program Files (x86)\Google App Engine SDK"

C:\Program Files (x86)\Google App Engine SDK>python appcfg.py upload_data --url=http://bulkloader-testing.appspot.com/remote_api --config_file="C:\Users\Jack Frost\Eclipse Workspace\Headsprout\GAE 2.1.2012\src\utilities\bulkloader\bulkloader.yaml" --filename="C:\Users\Jack Frost\Eclipse Workspace\Headsprout\GAE 2.1.2012\src\utilities\bulkloader\csv_files\small_hbos.csv" --kind=HBO
Uploading data records.
[INFO    ] Logging to bulkloader-log-20120207.105053
[INFO    ] Throttling transfers:
[INFO    ] Bandwidth: 250000 bytes/second
[INFO    ] HTTP connections: 8/second
[INFO    ] Entities inserted/fetched/modified: 20/second
[INFO    ] Batch Size: 10
[INFO    ] Opening database: bulkloader-progress-20120207.105053.sql3
[INFO    ] Connecting to bulkloader-testing.appspot.com/remote_api
[INFO    ] Starting import; maximum 10 entities per post
PASSED DATETIME 2/1/12 17:52
TYPE <type 'unicode'>
[ERROR   ] [WorkerThread-0] WorkerThread:
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\adaptive_thread_pool.py", line 176, in WorkOnItems
status, instruction = item.PerformWork(self.__thread_pool)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\bulkloader.py", line 764, in PerformWork
transfer_time = self._TransferItem(thread_pool)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\bulkloader.py", line 933, in _TransferItem
self.content = self.request_manager.EncodeContent(self.rows)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\bulkloader.py", line 1394, in EncodeContent
entity = loader.create_entity(values, key_name=key, parent=parent)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 445, in create_entity
entity = self.dict_to_entity(input_dict, self.bulkload_state)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 147, in dict_to_entity
self.__run_import_transforms(input_dict, instance, bulkload_state_copy)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 252, in __run_import_transforms
value = self.__dict_to_prop(transform, input_dict, bulkload_state)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 207, in __dict_to_prop
value = transform.import_transform(value)
  File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_parser.py", line 111, in __call__
return self.method(*args, **kwargs)
  File "C:\Users\Jack Frost\Eclipse Workspace\Headsprout\GAE 2.1.2012\src\utilities\bulkloader\hs_transformers.py", line 44, in date_time
print datetime.strptime(passed_datetime, '%m/%d/%y %H:%M')
AttributeError: 'module' object has no attribute 'strptime'
[INFO    ] [WorkerThread-1] Backing off due to errors: 1.0 seconds
[INFO    ] An error occurred. Shutting down...
[ERROR   ] Error in WorkerThread-0: 'module' object has no attribute 'strptime'

[INFO    ] 10 entities total, 0 previously transferred
[INFO    ] 0 entities (1516 bytes) transferred in 3.0 seconds
[INFO    ] Some entities not successfully transferred

1 Ответ

13 голосов
/ 07 февраля 2012

Возможно

from shared.datastore import *

переопределяет datetime как модуль.

Вы можете проверить это предположение, вставив операторы print в свой код

from datetime import datetime
print(datetime)
from shared.datastore import *
print(datetime)

и посмотреть, изменилось ли значение datetime.

Если мое предположение неверно, вы все равно можете использовать операторы print, чтобы «разделить» ваш код, пока не найдете, какая строка меняет значение datetime.

(В любом случае, предпочтительнее не использовать подстановочную форму импорта, поскольку она может быть источником этих странных ошибок.)

...