属性错误:'模块#34;对象没有属性python 3.2

时间:2014-08-14 00:46:05

标签: python

我有两个python文件:

test.py

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

if __name__ == "__main__":
    k()

test2.py

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'

1 个答案:

答案 0 :(得分:0)

正如评论中所建议的那样,你正在隐藏一个名为“test”的内置模块。如果将“test.py”重命名为任何其他名称(即不是内置模块),导入它,并使两个文件都驻留在同一文件夹中,它将正常运行。

例如:

<强> temp_test.py

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

if __name__ == "__main__":
    k()

<强> temp_test2.py

import temp_test

print("a")
temp_test.k()

运行temp_test2.py会产生此输出:

  

一个
  测试!

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

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

或者:

import subprocess
subprocess.call(['python', 'temp_test.py'])

我不知道你的os.system()电话失败的原因。这适用于我:2.7:

import os
os.system('python temp_test.py')

TL; DR

  1. 您的模块/文件名与内置模块相同。把它命名为别的。
  2. 阅读subprocess.call() docs。您正在错误地启动子进程。
  3. 最后注意:您的问题内容涉及的不同主题不同于您在评论中列出的尝试的变通方法(模块导入与子流程启动)。这是两个非常不同的东西,所以在继续处理你正在编写的任何脚本之前,请确保你已经阅读了它们,这样你就可以使用正确的脚本来完成任务。