执行练习代码时,即使在datetime模块之后也出现错误

时间:2018-11-08 08:33:31

标签: python python-3.x

from datetime import *
import os
stats=os.stat('aaa.txt')
print('File size in bytes:',stats.st_size)
print('File last Accessed Time:',datetime.fromtimestamp(stats.st_atime))
print('File last Modified Time:',datetime.fromtimestamp(stats.st_mtime))

即使在导入datetime模块之后,我也会收到类似

的错误
File size in bytes: 0
Traceback (most recent call last):
  File "F:/Python/Directories/datetime.py", line 1, in <module>
    from datetime import *
  File "F:\Python\Directories\datetime.py", line 5, in <module>
    print('File last Accessed Time:',datetime.fromtimestamp(stats.st_atime))
NameError: name 'datetime' is not defined

将导入语句编辑为:-

import datetime

(而不是)

from datetime import *

我遇到了错误

File size in bytes: 0
Traceback (most recent call last):
  File "F:/Python/Directories/datetime.py", line 2, in <module>
    import datetime
  File "F:\Python\Directories\datetime.py", line 6, in <module>
    print('File last Accessed Time:',datetime.fromtimestamp(stats.st_atime))
AttributeError: module 'datetime' has no attribute 'fromtimestamp'

2 个答案:

答案 0 :(得分:4)

您已将模块datetime命名为标准stdlib datetimefrom datetime import *然后从自身导入所有 ,其中不包括名为datetime的对象,从而导致NameError

更改模块名称。


Python中的导入路径由sys.path指定(按顺序)。 sys.path[0]始终为'.',也就是当前工作目录。

有效地,这意味着,如果您创建的扩展名为.py的文件与标准库包/模块的名称相同,则它将替换该包中的stdlib和您的import会优先选择您的模块而不是stdlib模块。

在您的特定情况下,您的datetime.py运行了from datetime import *,并尝试从自身而不是从stdlib datetime导入所有内容。 Python足够聪明,不会为已加载的模块重新运行导入语句,否则您将在模块导入自身的地方遇到无限循环,这表明它应该导入自身,因此它可以导入自身,然后看到应该导入本身,因此它会自行导入,从而看到....

但是,当您尝试通过datetime导入实际 做某事时,不陷入无限循环是没有用的,因为您希望看到stdlib {{1} }及其所有关联成员,但是您只会看到自己datetime中已经定义的内容!

答案 1 :(得分:-1)

尝试一下。

from datetime import datetime
import os
stats=os.stat('aaa.txt')  #first_pg
print('File size in bytes:',stats.st_size)
print('File last Accessed Time:',datetime.fromtimestamp(stats.st_atime))
print('File last Modified Time:',datetime.fromtimestamp(stats.st_mtime))