Python не может импортировать, ImportError: модуль не указан - PullRequest
2 голосов
/ 14 марта 2012

Я новичок в python и пытаюсь импортировать некоторые значения из одного файла в другой.Я хочу, чтобы моя "программа" перешла из main_file.py в другие файлы, такие как calculator.py, а затем вернулась к main_file.py

. Для этого я решил создать переменную, before_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 ]

5 голосов
/ 14 марта 2012

Когда вы делаете os.system(), это совершенно отдельный процесс Python; он не собирается делить какие-либо переменные с экземпляром Python, который на самом деле выполняет вызов os.system(). Это означает, что если вы измените ранее значение_качественного с calc.py, оно не будет отражено в вашем основном файле.

Здесь вы действительно хотите использовать функции; функции являются гораздо лучшими единицами потока управления, чем модули. Похоже, вы, возможно, еще не достигли Python, поэтому я думаю, что сейчас вам следует сидеть сложа руки - то, что вы пытаетесь, является хорошим признаком того, что у вас все хорошо, но это не будет иметь смысла, пока вы удобное определение и вызов функций.

Продолжай в том же духе! Python довольно крутой.

1 голос
/ 14 марта 2012

Я хочу, чтобы моя "программа" перешла из 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.

0 голосов
/ 14 марта 2012

os.system () выполняет команду, указанную в качестве аргумента в подоболочке. Это означает, что он запускает новый процесс для выполнения команды и не разделяет переменные вызывающего процесса. То, чего вы хотите достичь, лучше сделать с помощью классов и функций.

Предполагая, что у вас есть 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> python main.py
9

d: \ vikesh \ personal \ stuff> python main_class.py
42
Меня зовут Мой Calc

0 голосов
/ 14 марта 2012

Я хочу, чтобы моя «программа» перешла из main_file.py в другие файлы, например calculator.py, а затем вернулась к main_file.py

Итак, вmain_file.py, вы import calculator, а затем вызываете функцию, определенную в calculator.py, и передаете необходимую информацию (переменные из main_file) в качестве параметров в функцию.

0 голосов
/ 14 марта 2012

Как уже отмечал 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)

Вероятно, лучший учебник / справочник по питону, который я могу порекомендовать, является официальным по адресу: docs.python.org/tutorial/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...