2013-06-18 117 views
0

臨時異常類是在python腳本中動態使用'type'來定義的,該腳本用作模塊。當此類的實例在導入腳本中被捕獲時,它無法識別該類。 下面的代碼片段動態定義的類在導入模塊中不可見python

# the throwing module, defines dynamically 
def bad_function(): 
    ExceptionClass = type("FooBar", (Exception,), 
     { "__init__": lambda self, msg: Exception.__init__(self, msg) }) 
    raise ExceptionClass("ExceptionClass") 

的使用代碼

import libt0 

try: 
    libt0.bad_function() 
#except libt0.FooBar as e: 
#print e 
except Exception as e: 
    print e 
    print e.__class__ 

能不能解釋爲什麼libt0.FooBase是不是這個腳本可見?最後一行的觀察員輸出。

回答

2

目前尚不清楚,你怎麼指望FooBar的,而不做這樣的事情

def bad_function(): 
    ExceptionClass = type("FooBar", (Exception,), 
     { "__init__": lambda self, msg: Exception.__init__(self, msg) }) 
    globals()['FooBar'] = ExceptionClass 
    raise ExceptionClass("ExceptionClass") 
+0

由於存在,這個工程。我必須承認,我的蟒蛇知識很淺薄。我在Python中學到的所有東西都是語法和一些生存庫。我主要是C/C++的人。幫助真的很感激@gnibbler。 – user2496012

2

您在函數內部創建了類,所以它不作爲模塊的全局名稱空間中的名稱存在。實際上,除了bad_function正在執行之外,它根本不存在。這是同樣的原因失敗:

# file1.py 
def good_function(): 
    x = 2 

# file2.py 
import file1 
print file1.x 

你的異常類只是內部bad_function一個局部變量。