程序运行正常,但无法通过IndexError导入 - 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行,因为我没有使用那部分。

提前致谢!

python大神给出的解决方案

from executor import *

这是一种更好的方法,并且可以按您的要求正常工作。如果name =='main':则无需使用此方法。您也可以使用它们的名称来调用函数。

from executor import *
print (someCal(10))

编辑例如:

executor.py

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

另一个

from executor import *

print (someCal(10))

输出:

>>> 
100
>>> 

如果使用函数,则应在函数中返回一个值,而不是打印。如果返回一个值,则可以稍后打印它。但是,如果不使用return并仅将其保留为print num * num,则以后不能将其与print函数一起使用。您可以尝试看看,因此返回值在函数中很重要。

对于第二个问题,请检查以下一项:What does if __name__ == "__main__": do?

Python是有关清晰代码的最佳语言,因此您应该保持清晰,sys对您而言不是必需的。而且,如果name =='main',则不需要:此语句,请记住每个.py文件都是一个模块,因此,如果您可以在没有该语句的情况下导入任何模块,例如import random;那么您也可以导入自己的模块。只需注意它们必须位于同一目录中,以便Python可以找到您自己的模块/文件。把事情简单化 🙂

模块的另一种导入方法是:

import executor as ChuckNorris

print (ChuckNorris.someCal(10))

输出当然是相同的,您可以编写任何想要的内容来代替ChuckNorris,但是请确保该名称不会与程序中的另一个函数名称重叠。例如,您有一个名为Number.py的.py文件,您将导入该文件到另一个文件,但是您无法确定另一个文件中是否存在任何称为Number的函数,因此您可以像import Number一样调用它,就像您将要调用的那样。避免这种问题。