2012-10-12 74 views
2

我從我正在學習的課程中看到一些Python代碼,並且在某些測試特定功能支持的文件中看到錯誤,如果功能不存在,將不會嘗試使用它們。在我的情況下,我沒有可用的功能,所以條件之後的代碼不應該被執行。抑制PyDev中的不可達錯誤?

如果代碼實際到達,這些部分不應該顯示爲運行時錯誤。

例如:

def __call__(self, *args): 
    if not 'SIGALRM' in dir(signal): 
     return self.function(*args) 
    old = signal.signal(signal.SIGALRM, self.handle_timeout) 
    signal.alarm(self.timeout) 
    try: 
     result = self.function(*args) 
    finally: 
     signal.signal(signal.SIGALRM, old) 
    signal.alarm(0) 
    return result 

我得到在體內Undefined variable from import: SIGALRMUndefined variable from import: alarm等錯誤,但如果SIGALRM不支持的方法將返回。

有沒有辦法在這些部分抑制錯誤?

回答

0

這是不漂亮,但你可以通過設置首選項抑制所有的不確定變量(及其他)錯誤:

首選項 - >的PyDev - >編輯 - >代碼分析 - >未定義 - >未定義的變量從導入 - >忽略

或者交替,將註釋添加到每一行的末尾,例如:

#@UnresolvedImport

#@UnusedVariable

還有其他人可以用自動完成測試,應該不言自明。

下面介紹如何選擇地抑制在問題的代碼中的錯誤:

def __call__(self, *args): 
    if not 'SIGALRM' in dir(signal): 
     return self.function(*args) 
    old = signal.signal(signal.SIGALRM, self.handle_timeout) #@UndefinedVariable 
    signal.alarm(self.timeout) #@UndefinedVariable 
    try: 
     result = self.function(*args) 
    finally: 
     signal.signal(signal.SIGALRM, old) #@UndefinedVariable 
    signal.alarm(0) #@UndefinedVariable 
    return result 
0

如何使用getattrhasattr呢?也許像下面這樣:

def __call__(self, *args): 
    if not hasattr(signal, 'SIGALRM'): 
     return self.function(*args) 

    sigalrm = getattr(signal, 'SIGALRM') 
    alarm = getattr(signal, 'alarm') 

    old = signal.signal(sigalrm, self.handle_timeout) 
    alarm(self.timeout) 
    try: 
     result = self.function(*args) 
    finally: 
     signal.signal(sigalrm, old) 
    alarm(0) 
    return result 
+0

這當然更清潔 - 雖然我最初只是尋找一種方法來抑制警告。這是我沒有寫的代碼。我現在只用了幾天Python,我不得不說我真的不是動態類型的粉絲,因爲這個問題以及我已經遇到的很多其他問題(即讓它變得困難或不可能IDE使你的代碼更有意義)。 –