字符串匹配在python中不起作用

时间:2015-03-11 16:20:55

标签: python string

这是我的Django代码

print request.user.role
print request.user.role is "Super"
print request.user.role == "Super"
print "Super" is "Super"

并且控制台上的输出是

Super
False
False
False
True

我想知道它为什么不匹配确切的字符串

2 个答案:

答案 0 :(得分:4)

这是因为request.user.role不是字符串。因此,将其与字符串"Super"进行比较将返回false,因为没有隐式类型比较。如果要将其与一个字符串进行比较,则必须转换为字符串。要转换为字符串,您可以尝试:

str(request.user.role)

您的上一个print返回true,因为您只是将字符串"Super"与自身进行比较,显然。另外作为旁注,您只想在比较身份而不是值时使用is

答案 1 :(得分:3)

请不要使用字符串比较来检查用户角色。这种方法容易出错,可能会为新创建的字符串使用更多内存,并且总体上是危险的。例如,如果代表角色的值不是它的名称,则必须自己跟踪名称 - 值映射。或者,如果库会更改它的思路并将名称交换为整数等。

所有提供此类功能的库都有roles枚举,其中包含角色的所有值。因此,例如,在django-user-roles中,您可以执行

user.role.is_super # maybe role.is_Super
# or
from userroles import roles
user.role == roles.super # maybe roles.Super

这是更可读和更安全的方法。