属性错误:';模块";对象没有python 3.2的属性

属性错误:';模块";对象没有python 3.2的属性,python,Python,我有两个python文件: test.py def k(): print ("I am a test") print ("see! I do nothing productive.") if __name__ == "__main__": k() import test print ("a") test.k() test2.py def k(): print ("I am a test") print ("see! I do nothing prod

我有两个python文件:

test.py

def k():
    print ("I am a test")
    print ("see! I do nothing productive.")

if __name__ == "__main__":
    k()
import test
print ("a")
test.k()
test2.py

def k():
    print ("I am a test")
    print ("see! I do nothing productive.")

if __name__ == "__main__":
    k()
import test
print ("a")
test.k()
但当我运行test2.py时,它会显示错误:

Traceback (most recent call last):
  File "C:\Python32\test2.py", line 3, in <module>
    test.k()
AttributeError: 'module' object has no attribute 'k'
回溯(最近一次呼叫最后一次):
文件“C:\Python32\test2.py”,第3行,在
test.k()
AttributeError:“模块”对象没有属性“k”

正如评论中所建议的,您正在跟踪一个名为“测试”的内置模块。如果将“test.py”重命名为任何其他名称(即不是内置模块),导入它,并使两个文件位于同一文件夹中,它将正常运行

例如:

temp_test.py

def k():
    print("Test!")

if __name__ == "__main__":
    k()
import temp_test

print("a")
temp_test.k()
温度测试2.py

def k():
    print("Test!")

if __name__ == "__main__":
    k()
import temp_test

print("a")
temp_test.k()
运行temp_test2.py会产生以下输出:

a
测试

关于您的注释,尝试使用
subprocess.call()
失败,因为您需要添加
shell=True
参数,以便shell可以解析和解释命令,或者需要将参数拆分为一个列表并传递该参数:

import subprocess
subprocess.call('python temp_test.py', shell=True)
或:

我不知道为什么您的
os.system()
调用失败。这在2.7上对我有效:

import os
os.system('python temp_test.py')
TL;博士
  • 您的模块/文件名与内置模块相同。叫点别的吧
  • 读这本书。您正在错误地启动子进程

  • 最后一点注意:您的问题内容涉及的主题与您在评论中列出的尝试解决方法不同(模块导入与子流程启动)。这是两件截然不同的事情,因此,在继续编写任何脚本之前,请务必仔细阅读它们,以便在执行任务时使用正确的脚本。

    有一个问题,因此通常最好避免在自己的模块中使用该名称。您可能正在导入内置模块。@user2357112,它可以工作,上次我尝试时:使用subprocess.call(“python test.py”),为什么它不能工作?还有这个方法,导入os,os.system(“python test.py”),它也不起作用?你到底想做什么?导入一个模块,或者启动一个新进程?嗨,当我试图运行os.system和子进程时,它会在几秒钟内弹出cmd窗口,然后关闭它,那么,我如何停止cmd窗口呢?在额外窗口中启动的脚本末尾请求用户输入,对于Python3使用
    input()
    ,对于Python2使用
    raw\u input()