2013-11-15 32 views
4

現在我想建立一個功能get_doc(),它可以讓模塊 這裏的文檔是代碼如何動態地導入模塊以exec

def get_doc(module): 
    exec "import module" 
    print module.__doc__ 

而返回的信息:

Traceback (most recent call last): 
    File "<pyshell#36>", line 1, in <module> 
    get_doc(sys) 
NameError: name 'sys' is not defined 

回答

3

問題是您正在導入"module"而不是指定的模塊,並且您沒有將名稱module放在任何地方。愚蠢的修復程序,這將是總是使用exec

def get_doc(module): 
    exec "import {}".format(module) 
    exec "print {}.__doc__".format(module)" 

但不是exec,我會建議你使用__import__功能:

def get_doc(module): 
    module = __import__(module) 
    print module.__doc__ 

這讓更多的靈活性,並且可以修改,根據需要使用模塊。

+0

啊,真的很愚蠢!哈哈.. – Dergum

+0

沒錯。這將很難控制 – aIKid

2

當你說

get_doc(sys) 

python將無法識別sys。實際的辦法做你正在嘗試做的將是

  1. 傳遞模塊名作爲字符串參數
  2. 使用__import__功能加載模塊,這樣

    def get_doc(module): 
        mod = __import__(module) 
        print mod.__doc__ 
    
    get_doc("sys") 
    

注意:我不贊成在程序中執行動態代碼,但是如果您必須使用exec解決此問題,請閱讀this d對安全影響有基本的瞭解,然後看看aIKid的解決方案。

+0

哇,非常感謝!!!! – Dergum

+0

但是我只想使用exec,那麼怎麼樣? – Dergum

+0

@Dergum爲什麼?有什麼具體原因嗎?我通常不建議使用動態執行的代碼,這實際上是由'exec'完成的。 – thefourtheye