2012-10-12 46 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使你的代码更有意义)。 –