簡體   English   中英

無法將datetime.strptime與from datetime導入datetime一起使用

[英]Unable to use datetime.strptime with from datetime import datetime

我對以前可以使用的某些代碼感到困惑(昨天)。 使用python 2.7.6

我有

from datetime import datetime

openfor = (datetime.strptime(row[1],"%Y-%m-%d %H:%M:%S") - datetime.strptime(row[2], "%Y-%m-%d %H:%M:%S")).total_seconds()

並返回所需的值。 從今天早上開始

AttributeError: 'module' object has no attribute 'strptime'

如果我使用以下內容,則無論有無導入都可以。

openfor = (datetime.datetime.strptime(row[1],"%Y-%m-%d %H:%M:%S") - datetime.datetime.strptime(row[2], "%Y-%m-%d %H:%M:%S")).total_seconds()

這沒什么大不了的,因為它可以工作,但是代碼看起來丑陋,引起了我的好奇心。 那么關於為什么這將停止工作的任何建議? 以及如何解決? 謝謝

根據評論,導入聲明

from pylab import *

是問題的原因。 這將導入pylab 並將 pylab命名空間中的所有名稱復制到當前模塊的全局命名空間中。 datetime是以下名稱之一:

In [188]: import pylab

In [189]: 'datetime' in dir(pylab)
Out[189]: True

因此, datetime被重新分配給模塊而不是類。


之間的某個地方

from datetime import datetime

openfor = (datetime.strptime(row[1],"%Y-%m-%d %H:%M:%S") - datetime.strptime(row[2], "%Y-%m-%d %H:%M:%S")).total_seconds()

datetime被重新定義為等於模塊datetime而不是類datetime.datetime 導致此問題的原因是您尚未發布的代碼中。 (但是,導入語句import datetime可能是罪魁禍首。還要注意不要from module import * ,因為這可能會使用來自另一個模塊的名稱污染調用模塊的名稱空間。其中可能包括datetime 。)


順便說一句, 一些專家建議不要使用

from module import function

而是始終只導入模塊:

import module         # or 
import module as foo

盡管這可能是一種風格選擇,但遵守此規則可以使一切都從何而來非常清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM