'str'对象没有属性'len'

时间:2016-12-28 18:53:47

标签: python django loops scope

我有一个方法可以通过检查前三个字母/数字来确保它们是相同的,然后继续这样做

def combineProcess(request):
    carID1 = request.POST['carID1']
    carID2 = request.POST['carID2']
    for x in range (0,3):
        a += carID1.length(x)
        b += carID2.length(x)
    if a.equals(b):
        //do something

在使用之前它现在停止了,我得到了这个错误。

Exception Type: UnboundLocalError
Exception Value:    

local variable 'a' referenced before assignment
几个星期前我从未用过的东西没有改变任何东西,所以我做了a和b全球。

def combineProcess(request):
    carID1 = request.POST['carID1']
    carID2 = request.POST['carID2']
    global a,b
    for x in range (0,3):
        a += carID1.length(x)
        b += carID2.length(x)
    if a.equals(b):
        //do something

现在我收到了这个错误。

Exception Type: NameError
Exception Value:    

name 'a' is not defined

然后我删除了全局行并将其放入

a = "P"

并收到以下错误

str object has no attribute length() or len()

现在让我感到困惑的是这段代码是如何停止工作的,为什么它不能识别字符串对象有一个len()方法。主要是我失去了我的代码从工作到两周不工作的方式。

2 个答案:

答案 0 :(得分:3)

  

Python String len()方法

<强>语法

以下是len()方法的语法 -

len( str )

示例

str = "this is string example....wow!!!";
print("Length of the string: ", len(str))

当我们运行以上程序时,它会产生以下结果 -

Length of the string:  32

参考Python String len() Method

  

UnboundLocalError:赋值前引用的局部变量'a'

<强>解释

这是因为,即使存在ab,您也会在函数{{}内的名称ab上使用赋值语句1}}。当然,这会在函数的范围内创建一个名为combineProcess()a的变量。

Python解释器在模块加载时看到这一点,并决定不应在本地范围内使用ba的全局范围,这会在您尝试引用时导致问题变量在本地分配之前。

示例

b

如果您运行此程序,则会出现以下错误。

Var1 = 1
Var2 = 0
def function():
    if Var2 == 0 and Var1 > 0:
        print("Result One")
    Var1 =- 1

function()

因为修改了UnboundLocalError: local variable 'Var1' referenced before assignment 的值,所以在函数的范围内创建了一个名为Var1的变量。因此,由于Var1语句之前的条件检查Var1 > 0而报告错误。

但是如果我们修改代码如下。

Var1 =- 1

然后它工作正常。

请注意,如果我们在Var1 = 1 Var2 = 0 def function(): global Var1 if Var2 == 0 and Var1 > 0: print("Result One") Var1 =- 1 function() 条件检查之前移动语句Var1 =- 1,那么即使您不使用if语句,它也不会报告任何错误。因此,以下代码可以正常工作。

global Var1

参考:请参阅此SO answer

  

NameError:名称'a'未定义

<强>解释

可能您收到此错误,因为在Python中,您无法使用Var1 = 1 Var2 = 0 def function(): Var1 =- 1 if Var2 == 0 and Var1 > 0: print("Result One") function() 方法比较两个字符串。没有这样的方法存在。

示例:比较两个字符串

您可以使用equals()来比较两个字符串。 Python按字典顺序比较字符串,即使用字符的ASCII值。例如,要比较两个字符串是否相等,您可以执行以下操作。

> , < , <= , <= , == , !=

答案 1 :(得分:2)

我假设您来自Java等语言,您可以直接在字符串上调用函数。您可以在Python中执行此操作:

>>> A = "Hello"
>>> B = "Hello"
>>> A.__len__()
5

>>> A.__eq__(B)
True

然而,正确的做法是这样的:

>>> len(A)
5

>>> A == B
True

话虽如此,我不确定你在那里用长度函数试图完成什么。你说你的代码正在检查2个字符串中的前3个字母是否相同 - 你可以这样做:

A = "car123"
B = "car456"

print(A[:3] == B[:3]) # -> True

这使用Python的切片表示法来获取每个字符串的前3个字符,并将这些切片相互比较。