请考虑以下代码段:
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
?
答案 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