Python无法导入,ImportError:没有模块命名

时间:2012-03-14 10:45:32

标签: python import cmd

我是python的新手,我正在尝试将一些值从一个文件导入另一个文件。 我希望我的“程序”从main_file.py转到其他文件,如calculator.py,然后再回到main_file.py

为此,我决定创建一个变量,previous_runned,其值为's'。 当计算器被激活时,通过命令,它将选择该变量 (然后将它返回给main_file.py,它将检查变量的值,然后跳过它自己脚本的某些行,如果变量previous_runned的值为's')......:

    import os
    file_path = "calc.py"
    os.system(file_path)

...然后calc.py将从main_file.py ...中选择变量:

import previously_runned from main_file

....返回:

  File "C:\Users\Kevin\Prog\Calc.py", line 72, in <module>
  import main_file
  ImportError: No module named main_file

感谢您的帮助!

5 个答案:

答案 0 :(得分:5)

执行os.system()时,它是一个完全独立的Python进程;它不会与实际运行os.system()调用的Python实例共享任何变量。这意味着,如果您从calc.py更改previous_runned,它将不会反映在您的主文件中。

你真正想要使用的是功能;功能是比模块更好的控制流单元。听起来你可能还没有使用Python,所以我觉得你现在应该坐得紧 - 你正在尝试的是一个很好的迹象表明你做得很好,但是直到你才真正有意义。很舒服地定义和调用函数。

坚持下去! Python非常棒。

答案 1 :(得分:1)

  

我想要我的&#34;程序&#34;从main_file.py转到其他文件,比如   calculator.py,然后回到main_file.py

这是一个简单的例子,在main.py中开始执行;它从calc.py调用一个函数。函数返回后,执行将返回到main.py的下一行

james@brindle:tmp$cat main.py
import calc

value1 = "10"
value2 = "20"

def main():
    sum = calc.add(value1, value2)
    print sum

if __name__ == "__main__":
    main()
james@brindle:tmp$cat calc.py
def add(value_a, value_b):
    print "In ur calc.py, doin ur sumz"
    return value_a + value_b
james@brindle:tmp$python main.py 
In ur calc.py, doin ur sumz
1020

请注意,main.py中的calc.py内部未定义的内容可以从calc.py访问 - 它反过来使main.py内的内容可以从{{1}}内部访问{{1}} 1}}。

答案 2 :(得分:0)

正如AdamKG已经指出的那样,你需要功能。您有两个选项,要么使calc.py包含该函数并导入该函数,要么在主文件中包含该函数。例如:

main.py

def calc(var1,var2,var3):
    ans1 = var1 + var2
    ...
    return(ans1,ans2,ans3)

var1 = ...
var2 = ...
var3 = ...

ans1,ans2,ans3 = calc(var1,var2,var3)

我可以推荐的最好的python教程/参考可能是官方的: docs.python.org/tutorial /

答案 3 :(得分:0)

  

我想让我的“程序”从main_file.py转到其他文件,比如calculator.py,然后再回到main_file.py

因此,在main_file.py中,您import calculator,然后调用calculator.py中定义的函数,并将其所需的信息(来自main_file的变量)作为参数传递给功能。

答案 4 :(得分:0)

os.system()执行作为子shell中的参数提供的命令。这意味着它会生成一个执行命令的新进程,并且不会共享调用进程的变量。使用类和函数可以更好地完成您想要实现的目标。

假设你在同一个文件夹中有calc.py和main.py,这是一个用函数执行此操作的简单示例。请注意,此示例仅用于解释,它使用糟糕的编程实践,如可以避免的全局变量。

  

<强> calc.py

var1 = None
var2 = None

def set_variables(a,b):
    global var1, var2
    var1 = a
    var2 = b


def calculate(s):
    if s=='add':
        print var1 + var2
    elif s=='sub':
        print var1 - var2
    elif s=='div':
        print var1/var2
    elif s=='mul':
        print var1*var2
    else:
        print "Invalid Operation"
  

<强> main.py

from calc import *

set_variables(4,5)
calculate('add')
raw_input()

您可以看到我们如何从calc.py调用main.py中的代码而不会产生任何新进程。

这是使用类的另一个例子。这更清晰,结构更好,不会使用全局变量等不良做法。

  

<强> calc_class.py

class Calculator:
    def __init__(self,s):
        #init code
        self.s = s

    def __str__(self):
        return self.s

    def add(self,a,b):
        return (a + b)

    def sub(self,a,b):
        return (a-b)

    def div(self,a,b):
        return (a/b)

    def mul(self,a,b):
        return (a*b)
  

<强> main_class.py

from calc_class import *

calc = Calculator('My Calc')
print calc.add(40,2)
print "My name is %s "%calc

用法 -
d:\ vikesh \ personal \ stuff&gt; python main.py
9

d:\ vikesh \ personal \ stuff&gt; python main_class.py
42个
我叫My Calc