当locals()存在时,是否有一个python语法检查器可以忽略“已分配但从未使用过”?

时间:2013-01-16 00:02:48

标签: python vim syntax pyflakes

假设我有代码

def foo():
    bar = 1
    wibble = 3
    return locals()

我当前的语法检查程序(带有syntastic.vim的flake8)将在两个变量上抛出“已分配但从未使用过”错误。然而,locals()意味着它们实际上正在被使用,如果没有明确的话。

def foo():
    bar = 1
    wibble = 3 # <-- I still want this to throw as it is definitely not being used
    return bar

是否有任何python检查器或自定义设置将是locals()知道和宽松?

编辑:

对于vim / syntastic / flake8来说,这是一个快速而肮脏的解决方案,可以抑制.vimrc中的警告

"Ignore unused variable warnings whenever locals() is being used in a file                                                              
function! LocalsWarningSuppress()                                              
    if ( search("locals()",'nw') > 0)                                          
        let g:syntastic_python_checker='flake8 --ignore=W806'                  
    else                                                                       
        let g:syntastic_python_checker='flake8'                                
    endif                                                                      
endfunction 

au BufWritePre **/(filter_pattern)*py call LocalsWarningSuppress()                 

1 个答案:

答案 0 :(得分:2)

没有。即使pylint,我所知道的最强大,最挑剔的Python linter,也不足以发现这种情况。但如果是的话,它可能会抱怨你首先使用locals()。 :)

另一方面,与pyflakes不同,pylint支持magic comments来忽略特定问题。但是我必须警告你,pylint非常挑剔(因此很慢)开箱即用,因此你需要花几分钟时间将其list of checks缩减到你真正关心的事情。 / p>

一个ticket closed as wontfix,用于在字符串格式化的特定情况下改善此行为。看来pylint开发人员不希望将其作为一种功能实现。