【问题标题】:Suppress unreachable errors in PyDev?抑制 PyDev 中无法访问的错误?
【发布时间】:2012-10-12 12:42:45
【问题描述】:

我有一些来自我正在学习的课程的 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,该方法将返回。

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

【问题讨论】:

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


    【解决方案1】:

    它并不漂亮,但您可以通过在以下位置设置首选项来抑制所有未定义变量(和其他)错误:

    首选项 -> PyDev -> 编辑器 -> 代码分析 -> 未定义 -> 来自导入的未定义变量 -> 忽略

    或者,将 cmets 添加到每行的末尾,例如:

    #@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
    

    【讨论】:

      【解决方案2】:

      改用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
      

      【讨论】:

      • 这当然更干净——尽管我最初只是在寻找一种抑制警告的方法。这是我没有写的代码。我现在才使用 Python 几天,我不得不说我真的不喜欢动态类型,因为这个问题和我已经遇到的许多其他问题(即使它变得困难或不可能IDE 让您的代码更有意义)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2019-07-12
      • 2021-08-19
      • 2015-11-21
      • 2021-10-04
      相关资源
      最近更新 更多