2013-11-01 16 views
1

Я новичок в python, поэтому, вероятно, это то, что я только что пропустил ... Я просто пытаюсь запустить файл, который вызывает другой файл.Объект Python typeerror 'module' не является вызываемым

У меня есть файл, как myfile.py:

#!/usr/bin/python 

import another_file 

things = ... """ some code """ 

def mystuff(text, th=things): 
    return another_def(text, th) 

«another_file» может скомпилировать/запустить прекрасно само по себе и имеет размораживание «another_def» и переменную «th» (это только пример названия. ..)

Так я бегу python из командной строки, а затем попробовать:

>>> import myfile 
>>> t = myfile.mystuff('some text') 

и я получаю ошибку:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "myfile.py", line 18, in mystuff 
    return another_def(text, th) 
TypeError: 'module' object is not callable 

import another_file Я попытался, даже если он находится в myfile.py, но это, похоже, не имеет никакого значения.

Если это делает никакой разницы, я пытался:

print myfile 
<module 'myfile' from 'myfile.py'> 
print myfile.mystuff 
<function mystuff at 0x7fcf178d0320> 

поэтому я полагаю, что, если он может найти файл и функцию, проблема заключается в том, как он пытается вызвать другой файл .... возможно. Любая помощь ценится!

+0

Вы можете разместить код метода 'myfile.mystuff' который, кажется, проблематично? –

+2

Если вы изменили имена, чтобы защитить невинных, вы затруднили ответ на этот вопрос. Ошибка «Модуль не вызываемый» означает, что вы пытаетесь использовать модуль, как если бы это была функция. – doctorlove

+0

@doctorlove Я изменил имена в надежде сделать проблему проще (не работает, но хорошо) - вы были правы на самом деле, потому что в исходном коде «another_file» и «another_def» имеют одно и то же имя. .. вздох. Спасибо – dgBP

ответ

3

Я точно не знаю, почему вы получаете TypeError (там, наверное, больше, чем то, что вы показываете), но если вы хотите получить доступ к функциям из another_file, то вы должны сделать:

return another_file.another_def(text, th) 
+0

, который, казалось, сделал это! Я предположил, что, импортировав файл, он подберет имена функций ... * facepalm * – dgBP

+0

@dgBP Замечательно! :) – TerryA

1

вы можете сделать это с помощью так называемого дикого импорта:

от other_file импорта *

и таким образом вы можете получить доступ ко всем объектам и функциям в этом файле. Если, конечно, вы не определили

__all__ 

список, ограничивающий экспорт.

Пример:

#some_file.py 

a = 3; b = 4 
__all__ = ['a'] 

теперь с диким импортом:

from some_file import * 

вы видите только 'а'

Смежные вопросы