在Python中,我是否可以得到一个始终计算为true的警告?

在Python中,我是否可以得到一个始终计算为true的警告?,python,python-2.7,if-statement,warnings,Python,Python 2.7,If Statement,Warnings,我的代码中有这样一个bug: if 'char' or 'CHAR' in dt: foo = 'ch' 我花了一段时间调试它。如果我是正确的,则第一个操作数的计算结果始终为true,这将导致If语句体始终执行 在C++中,我会在一些情况下得到警告,使这些bug容易被消灭。 有什么方法可以让Python警告我这些情况吗(因为它会被解释什么的)?在一般情况下很难不发出误报。想象一下这个代码: if list_empty or x in my_list: 这对任何人都完全有效,因为lis

我的代码中有这样一个bug:

if 'char' or 'CHAR' in dt:
    foo = 'ch'
我花了一段时间调试它。如果我是正确的,则第一个操作数的计算结果始终为true,这将导致If语句体始终执行

<>在C++中,我会在一些情况下得到警告,使这些bug容易被消灭。


有什么方法可以让Python警告我这些情况吗(因为它会被解释什么的)?

在一般情况下很难不发出误报。想象一下这个代码:

if list_empty or x in my_list:
这对任何人都完全有效,因为
list\u empty
可能是一个布尔值。现在:

if number1 or number2 in my_list:
(唤醒:))人工会立即看到错误(因为名称相似,通常识别数字而不是条件,如果我的列表中有name1或name2:,则使用
的字符串相同),但这需要静态分析器确定类型

即使在那些“琐碎”的情况下,谁知道程序员是否不想测试
number1
是否为零或
name1
是否为空以继续下一个测试

类型注释可能会有所帮助,我并没有测试所有的工具来给你一个肯定的答案,但是python的动态特性使得很难确定程序员的意图,一个分析程序会发出大量的误报,这有什么价值呢

对于string&integer/float文本,这种构造可能是错误的,所以我用正则表达式编写了一个糟糕的静态分析器。便宜,如果它大叫,你很可能有故障线路(这里的独立示例自我分析):

产出:

GOTCHA if 'char' or 'CHAR' in dt:
GOTCHA if 12.0 and 45 in dt:

这是一个字符串@raj,已更新。应该是数据类型,但你知道用户@在大型代码文件中,即使是最简单的东西有时也很难找到。机器可以帮助对抗我的人性FWIW,
'char'或任何
求值为
'char'
,因为非空字符串为True,而
任何
都不会求值(例如,如果它是一个函数,则不会被调用),因为
短路。@PM2Ring我想他知道。这只是一个输入错误,但一旦编码并在代码中丢失,就很难调试,因此任何人都可以告诉op use哪个工具可以得到警告,
pylint
flake 8
?似乎所有的东西都不能显示警告。我的列表中的编号1或编号2的明显错误到底是什么?
?名称之间的相关性帮助人类读者了解,目的是测试这两个数字是否都属于我的列表。嗯,人类作者也可能有合理的意思“number1不是零或者number2在列表中”…这就是为什么很难确定。
GOTCHA if 'char' or 'CHAR' in dt:
GOTCHA if 12.0 and 45 in dt: