到目前为止我找到并解决的错误中,我的实际代码非常干净且运行良好。我想我已经缩小了以下问题...我有一个文件夹,“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
我已经在我的标题中尝试了上述两种解决方案,但它们似乎都不起作用。如果我正在调用该文件,那么它不应该像我自己运行时那样运行吗?如果无法从上述信息中找出解决方案,那么我很抱歉浪费你的时间,我还有更多工作要做。
答案 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 )以使该文件夹被识别为模块...等。