【问题标题】:Cannot seem to use import time and import datetime in same script in Python似乎无法在 Python 的同一脚本中使用导入时间和导入日期时间
【发布时间】:2012-06-28 00:37:03
【问题描述】:

我在 Windows 上使用 Python 2.7,并且正在编写一个同时使用时间和日期时间模块的脚本。我以前做过,但是 python 似乎对加载两个模块很敏感,而且我之前使用的方法似乎不起作用。以下是我使用的不同语法以及我目前遇到的错误。

首先我尝试过:

from datetime import *
from time import *
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
else: time.sleep(60)

错误:

else: time.sleep(60) AttributeError: 'builtin_function_or_method' object has no attribute 'sleep'

然后我尝试了:

from datetime import *
from time import *
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

我没有出错,但也没有睡眠延迟。

接下来我尝试了:

from datetime import *
import time
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

错误:

filetime = localtime(filetimesecs) NameError: name 'localtime' is not defined

另一个修改,我试过这个:

import time
import datetime
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

错误

checktime = datetime.today() - timedelta(days=int(2)) AttributeError: 'module' object has no attribute 'today'

最后,我尝试了这个:

import time
from datetime import *
...
checktime = datetime.today() - timedelta(days=int(2))
checktime = checktime.timetuple()
...
filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
file = webgatelogdir + '/' + fn
filetime = localtime(filetimesecs)
...
#else: time.sleep(60)  # comment out time.sleep statement

错误:

checktime = datetime.today() - timedelta(days=int(2)) AttributeError: 'module' object has no attribute 'today'

所以我不确定如何让这两个模块很好地发挥作用。或者我需要另一种方法来延迟脚本。

建议?或者指出我犯的错误?

谢谢。

【问题讨论】:

  • 好的,我一直在编码和测试,而你们一直在回答(谢谢!)。这就是我将导入行更改为“从时间导入时间,睡眠,本地时间从日期时间导入日期时间,timedelta”,这使得除了睡眠语句之外的一切都可以工作。如果我使用 'time.sleep(60)' 我得到 AttributeError: 'builtin_function_or_method' 对象没有属性 'sleep' 但如果我使用 'time.time.sleep(60)' 我得到相同错误。
  • 好的,我一直在编码和测试,而你们一直在回答(谢谢!)。这是我将导入行更改为: from time import time, sleep, localtime from datetime import datetime, timedelta 这使得除了 sleep 语句之外的所有内容都可以工作。在使用 'time.sleep(60)' 然后 'time.time.sleep(60)' 之后,最终起作用的是 'sleep(60)'

标签: python datetime time sleep


【解决方案1】:

永远不要使用from x import * 形式的导入,因为你不知道你会得到什么。在这种情况下,第二次导入会从第一次导入中删除一些符号,因为它们具有相同的名称。

要么使用import x 并使用x.y 限定您在该模块中使用的所有内容,或者使用from x import y 仅导入选定的项目。

【讨论】:

    【解决方案2】:

    不要使用from ... import *——这是一种方便交互使用的语法,会导致脚本混淆。

    这是一个应该可以工作的版本:

    import time
    import datetime
    ...
    checktime = datetime.datetime.today() - datetime.timedelta(days=int(2))
    checktime = checktime.timetuple()
    ...
    filetimesecs = os.path.getmtime(webgatelogdir + '/' + fn) 
    file = webgatelogdir + '/' + fn
    filetime = time.localtime(filetimesecs)
    ...
    #else: time.sleep(60)  # comment out time.sleep statement
    

    在使用import <modulename> 导入模块时,当然需要为这些模块中的所有名称使用完全限定名称

    【讨论】:

      【解决方案3】:

      我的猜测是你有冲突是因为你的from something import *

      由于datetime 导出time 类,这可能与time 模块冲突。

      结论:不要使用import * ;-)

      【讨论】:

        【解决方案4】:

        当你只做 import *.我强烈建议不要这样做。

        import time
        import datetime
        
        .
        .
        .
        .
        
        time.sleep(60)
        

        如果您不想在所有函数前面加上time.datetime.,也可以执行以下操作

        from datetime import X, Y
        from time import Z, W
        
        X.something()
        ... etc ...
        

        【讨论】:

        • 没有time.time.sleep()。只是time.sleep()
        【解决方案5】:

        这两个模块使用 sasme 名称定义了一些函数/类型。最好的方法是显式导入它们并使用你需要的东西:

        import datetime
        import time
        datetime.datetime.today() # Datetime object for today
        time.time() # Current time
        

        更一般地说,您不能期望在from x import *import x 之间盲目切换。您需要查看每个库的文档来决定要使用哪些功能。

        【讨论】:

          【解决方案6】:

          您可以在导入时间时使用as

          import time as t
          from datetime import datetime
          ...
          t.sleep(2)
          

          【讨论】:

          • 这是最简单、最好、最简单的解决方案。
          • 这是一个hack时间,从datetime导入时间与导入时间冲突
          【解决方案7】:

          正如上面 cmets 中每个人都正确提到的那样,这个问题是由于:

          from datetime import *
          

          但是我遇到了一个问题,我将它写在一个文件中并尝试运行,由于它不起作用,我从该文件中删除了整个导入语句,但是当我尝试再次运行它时,它仍然是一样的错误。这很令人惊讶,因为当一个语句根本不在文件中时,它怎么会导致错误呢? 但是经过一些调试后,我意识到同样的语句在其他一些相互依赖的文件中,因此出现了错误。

          所以,我想说的是,如果错误仍然存​​在,请检查项目中的所有文件是否有此语句,并将它们替换为要导入的特定模块,例如:

          from datetime import datetime, timedelta
          

          希望这会有所帮助!

          【讨论】:

            【解决方案8】:

            你可以让它变得简单

            from datetime import *
            
            from time import *
            

            【讨论】:

            • 这是已经 OP 在问题中所做的,使用from X import *,这导致了错误。这就是为什么正如其他答案中提到的那样,尽可能避免import *。见Why is “import *” bad?
            猜你喜欢
            • 2013-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多