抑制PyDev中无法访问的错误?

时间:2012-10-12 12:42:46

标签: python eclipse compiler-errors pydev unreachable-code

我从我正在学习的课程中获得了一些Python代码,并且在某些测试支持特定功能的文件中看到错误,如果没有这些功能,则不会尝试使用它们。就我而言,我没有可用的功能,因此条件之后的代码不应该被执行。

如果实际到达代码,这些部分不应表现为运行时错误。

例如:

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,则该方法会返回。

有没有办法抑制这些部分的错误?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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