Pylint抱怨将字符串与字面值进行比较,其中'是'

时间:2017-12-12 18:03:05

标签: python python-3.x equality pylint

请考虑以下代码段:

R0123

Pylint在第二行返回推荐is,我无法在error message wiki找到。不过在this part of the docs中提到过它:

  

文字比较(R0123):

     

与文字的比较在将对象与文字进行比较时使用,这通常是您不想做的事情,因为您可以将其与不同的文字进行比较。

这个解释对我来说根本没用。我知道使用==进行两个字符串对象之间的比较可能会导致与预期不同的结果,但是为了将对象与文字进行比较,它与==相同。使用is时,错误消失。

我为什么不在这里使用Create Trigger [dbo].[InsertPersonalInfoTrigger] ON [dbo].[PersonalInfo] after Insert as begin declare @Name nvarchar(50) declare @FamilyName nvarchar(50) declare @FatherName nvarchar(50) declare @BirthDate nchar(10) declare @GenderID int declare @NationalId nvarchar(50) declare @id int select @Name=Max(@Name),@FamilyName=Max(@FamilyName),@FatherName=Max(@FatherName),@BirthDate=Max(@BirthDate) ,@GenderID=Max(@GenderID),@NationalId=Max(@NationalId),@id=Max(@id) from Inserted if(@Name='') begin RAISERROR ('Enter the Name', 16, 1 ); RollBack return; end declare @LogID int set @LogID= (select isnull(max(LogID),0) from DBLog) +1 declare @ActionDes varchar(2000); set @ActionDes = 'Insert Into Gender INNER JOIN PersonalInfo ON Gender.GenderID = PersonalInfo.GenderID INNER JOIN RegisterationForm ON PersonalInfo.id = RegisterationForm.id(Name,FamilyName,FatherName,BirthDate,GenderID,NationalId,id) Values("' + @Name + '","' + @FamilyName + '","' + @FatherName + '","' + @BirthDate + '",'+cast(@GenderID as varchar(20))+ ', "' + @NationalId +'",'+cast(@id as varchar(20))+ ')'; declare @dt datetime; set @dt=getdate(); declare @usr varchar(50); select @usr =current_user insert into DBLog(LogID,ActionDes,ActionTime,ActionUser) values (@LogID,@ActionDes,@dt,@usr) end Go

1 个答案:

答案 0 :(得分:13)

is检查左手参数是否与右手参数保持完全相同的引用。这对于单身None来说很好,但对于其他类型来说通常是个坏主意,其中多个实例可以具有相同的逻辑值。

考虑,例如以下示例:

>>> my_string = ''.join([c for c in 'xfje'])
>>> print my_string
xfje
>>> print my_string == 'xfje'
True
>>> print my_string is 'xfje'
False