2010-05-28 73 views
1

我有兩個python文件file1.py和file2.py。 我使用exec()來獲取file2.py中定義的方法/變量。exec方法問題

file1.py have a class as given below 
class one: 
     def __init__(self): 
      self.HOOK = None 
      exec(file2.py) 
      self.HOOK = Generate 
      ### call the hook method #### 
      self.HOOK() 

file2.py looks like as (There is no class define in file2.py) 
def Generate() 
     do 1 
     do 2 
     hello() 

def Hello() 
    print "hello" 

現在的問題是因爲當我運行腳本它給出了一個錯誤的全局名稱你好找不到。 如果我從file2.py中的Generate方法中刪除Hello(),那麼它的工作正常。 我無法在file1.py中使用import file2.py,因爲在file2.py中只有一個方法名(Generate)被修復(它被視爲需求)。 因此,除了Genarate方法,用戶可以定義任何方法,並且可以在生成方法中調用此方法,因爲此方法不起作用,所以我必須將整個代碼寫入生成方法而且代碼也是重複的。

任何幫助真的是可觀...

+0

請格式化你的代碼的代碼(從四個空格每一行)。那麼在堆棧溢出上讀取會容易得多。 – 2010-05-28 06:35:58

+0

是否有你需要使用exec()的理由?通常有一個解決方法。 – 2010-05-28 10:31:18

回答

1

試試這個:

# file1.py 
from file2 import Generate 

class one: 
    def __init__(self): 
     self.HOOK = Generate 
     ### call the hook method #### 
     self.HOOK() 

在你的第二個文件:

# file2.py 
def Generate(): 
    # do 1 
    # do 2 
    hello() 

def hello() 
    print "hello" 
0

從您發佈的東西,它看起來像你定義一個函數

def hello(): 
    print "hello" 

,然後試圖調用另一個函數

Hello() 

請注意,python非常關心大寫和非大寫字母。

+0

我對這個錯誤表示歉意...... 這是錯別字 – 2010-05-28 06:48:12

0

您可以安全地寫入file1.pyfrom file2 import Generate,會做的伎倆 - 它將從file2只導入Generate方法到當前的命名空間,所以所有的用戶在file2定義的其他方法將無法雜亂的命名空間file1

+0

Hi Tamas,我認爲你誤解了我的問題。 我想當你cal生成()然後在我的當前空間沒有方法Hello()被定義。但我想在你的()也在我目前的名字空間。 – 2010-05-28 10:32:08

+0

所以我應該如何執行,所有其他方法稱爲內部生成()也將調用 – 2010-05-28 10:32:58

+0

@mukul:所以你試圖做某種自動導入?但至少在這裏閱讀:http://stackoverflow.com/questions/1493888/python-auto-importing – 2010-05-28 10:36:08