我从我正在学习的课程中获得了一些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: SIGALRM
,Undefined variable from import: alarm
等错误,但如果不支持SIGALRM
,则该方法会返回。
有没有办法抑制这些部分的错误?
答案 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)
如何使用getattr
和hasattr
呢?可能类似于以下内容:
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