Python:从另一个文件调用的程序运行不正常

时间:2015-05-11 03:39:37

标签: python import filesystems directory

到目前为止我找到并解决的错误中,我的实际代码非常干净且运行良好。我想我已经缩小了以下问题...我有一个文件夹,“Stocks”,包含python代码和另一个嵌套文件夹,“PullStock”,其中包含更多python代码和文本文件。

文件系统示例:

Folder: Stocks
  python code files (`stockcalc.py`)
  Folder: PullStock
    python code files (`pullList.py`)
    text files

我可以自己运行程序pullList.py并运行正常。它所做的就是解析文本文件的行并将变量存储到数组中。单独运行此程序时的输出如下:

array length in pullList:  2

现在,当我运行stockcalc.py时,我从“PullStock”文件夹中导入文件pullList.py并且它运行不同。输出如下:

array length in pullList:  0

stockcalc.py的标题如下:

#!/usr/bin/env python
from PullStock import pullList
#import PullStock.pullList

我已经在我的标题中尝试了上述两种解决方案,但它们似乎都不起作用。如果我正在调用该文件,那么它不应该像我自己运行时那样运行吗?如果无法从上述信息中找出解决方案,那么我很抱歉浪费你的时间,我还有更多工作要做。

2 个答案:

答案 0 :(得分:0)

您至少遇到过多个问题。从这里开始:

4

您的目录名为from StockList import pullList ,但您尝试使用名称PullStock。这显然无法发挥作用。

但是,即使你解决了这个问题,你也遇到了更大的问题:StockList不是一个包。在Python 2中(它看起来像你正在使用),如果一个目录中有一个名为StockList的文件,那么它只是一个包。它可以是空的,但它必须存在。

在程序包目录中运行脚本几乎总是错误的,因此通过修复它,您也会破坏有效的部分。你无论如何都可以逃脱它,但是你应该研究一个更好的组织 - 例如,一个__init__.py文件,它允许你将包作为脚本运行,或者#34;启动器"顶级脚本。

我有50/50的赔率你还有一个问题:如果__main__.py正在打开pullList.py'spam.txt'而只是期望这样做,那么它就赢了#39 ;当你的工作目录不是脚本的目录时,工作;您希望将'eggs.txt'添加到脚本顶部,然后使用scriptdir = os.path.abspath(os.path.dirname(sys.argv[0]))等。

最后,为模块使用全小写名称通常是个好主意。特别是如果您希望在Windows和非Windows系统上运行相同的代码。

答案 1 :(得分:0)

如果您想使用多个文件组织并创建包和导入模块,您应该查看Python Doc中的教程。 https://docs.python.org/2.7/tutorial/modules.html#packages

在那里,您将找到一个很好的解释,说明您应该如何组织软件包以及您需要添加哪些文件( __ init __。py )以使该文件夹被识别为模块...等。