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

2024-04-24 13:00:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python 2.7,下面是我的脚本的简化版本:

你知道吗执行人.py你知道吗

import sys 

def someCal(num):

        num = int(num)
        print num*num

someCal(sys.argv[1])

所以python executor.py 13会打印出169,它工作正常。 我还有另一个脚本,我想利用someCal()中的executor.py函数,所以我导入了它

你知道吗主.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])

我不知道为什么它总是提到第13行执行人.py,因为我没用那部分。你知道吗

提前谢谢!你知道吗


Tags: toinpyimport脚本maincountsys
2条回答
from executor import *

这是一个更好的方法,会像你一样好用通缉犯。不需要如果name='main':使用此方法。你也可以用它们调用你的函数名字。比如地址:

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那样保留它,那么您以后就不能使用print函数了。你可以试试看那个。所以呢,返回值在函数中很重要。你知道吗

For your second question, check this one: What does if __name__ == "__main__": do?

Python是关于清晰代码的最佳语言,因此您应该保持清晰,sys对您来说不是必需的。如果name='main':这个语句,请记住每个.py文件都是一个模块,所以如果可以导入任何没有该语句的模块,比如import random;然后您可以导入自己的模块我也是。只是注意它们必须保持在同一个目录中,以便Python可以找到您自己的模块/文件。保持简单:-)

Another import method for a module is:

import executor as ChuckNorris

print (ChuckNorris.someCal(10))

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

当你import executor主.py它实际上在做python executor.py,我建议你改变你的执行人.py收件人:

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

而且,在直接使用sys.argv[1]之前,您可能需要添加像if len(sys.argv)>1这样的防御代码

相关问题 更多 >