程序运行正常但无法使用IndexError导入

时间:2014-12-27 05:05:52

标签: python

我正在使用python 2.7,以下是我的脚本的简化版本:

executor.py

import sys 

def someCal(num):

        num = int(num)
        print num*num

someCal(sys.argv[1])

所以python executor.py 13将打印出169,它按预期工作。 我有另一个脚本,我想在someCal()中使用executor.py函数,所以我导入它

main.py

import executor

to_count = 999
executor.someCal(to_count)

执行python main.py时,我收到了以下错误消息:

  File "main.py", line 3, in <module>
    import executor
  File "/Users/mac/executor.py", line 13, in <module>
    someCal(sys.argv[1])

我不知道为什么它继续提到executor.py中的第13行,因为我没有使用那部分。

提前致谢!

2 个答案:

答案 0 :(得分:2)

当您在 main.py import executor时,它实际上正在python executor.py,我建议您将 executor.py 更改为:

if __name__ == '__main__':
        someCal(sys.argv[1])

并且,您可能希望在使用if len(sys.argv)>1之前直接添加防守代码sys.argv[1]

答案 1 :(得分:2)

from executor import *

这是一种更好的方法,可以正常使用。如果名称 ==&#39; 主要&#39;:< / em>用这种方法。您也可以使用他们的名字来调用您的函数。喜欢:

from executor import *
print (someCal(10))

编辑例如:

  

executor.py

def someCal(num):
    num = int(num)
    return num*num
  

another.py

from executor import *

print (someCal(10))

输出:

>>> 
100
>>> 

如果使用函数,则应该返回函数中的值,而不是打印。如果你返回一个值,你可以稍后打印。但是如果你不使用 return 并保持它像 print num * num ,那么以后你不能用它来打印功能。你可以尝试看看。因此,返回一个值在函数中很重要。

  

对于您的第二个问题,请选中以下问题:What does if __name__ == "__main__": do?

Python是关于清除代码的最佳语言,因此您应该保持清晰, sys 对您来说不是必需的。你不需要如果名称 ==&#39; 主要&#39;:这句话,请记住每个.py文件都是一个模块,所以如果你可以导入任何没有该语句的模块,比如 import random ;那么你也可以导入你自己的模块。只需关心它们必须保持在同一个目录中,这样Python就可以找到你自己的模块/文件。保持简单: - )

  

模块的另一种导入方法是

import executor as ChuckNorris

print (ChuckNorris.someCal(10))

输出当然是相同的,您可以编写任何您想要的内容而不是 ChuckNorris ,但请确保该名称与程序中的其他函数名称不重叠。例如,你有一个名为Number.py的.py文件,你将把这个文件导入到另一个文件中,但你不能确定在另一个文件中是否有任何名为 Number 的函数,所以你可以调用它导入数字为whatyouwanttocallit ,您将避免出现这些问题。