Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “str”对象没有属性“len”_Python_Django_Loops_Scope - Fatal编程技术网

Python “str”对象没有属性“len”

Python “str”对象没有属性“len”,python,django,loops,scope,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):

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

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
Exception Type: NameError
Exception Value:    

name 'a' is not defined
几周前我从来没有用过它,但它并没有改变任何东西,所以我把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: UnboundLocalError
Exception Value:    

local variable 'a' referenced before assignment
Exception Type: NameError
Exception Value:    

name 'a' is not defined
然后我去掉了全局线,把这个

a = "P"
并得到以下错误

str object has no attribute length() or len()
这让我感到困惑,这段代码是如何停止工作的,为什么它不能识别字符串对象有一个len方法。主要是我不知道我的代码是如何在两周的休息时间内从工作变为不工作的

Python字符串len方法

语法

以下是len方法的语法−

len( str )
范例

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

Length of the string:  32
参考:

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

解释

这是因为,即使a和b存在,您也在函数combineProcess中对名称a和b使用赋值语句。当然,这会在函数的作用域内创建一个称为a和b的变量

Python解释器在模块加载时看到了这一点,并决定a和b的全局作用域不应在局部作用域内使用,这会导致在本地分配变量之前尝试引用变量时出现问题

范例

如果运行此程序,将出现以下错误

UnboundLocalError: local variable 'Var1' referenced before assignment
由于Var1的值被修改,因此在函数的作用域内创建了一个名为Var1的变量。结果,由于条件检查,Var1=-1语句之前的Var1>0,报告了错误

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

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

function()
if string1 == string2:
    // do something
那么它工作得很好

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

function()
注意,如果我们在if条件检查之前移动语句Var1=-1,那么即使您不使用全局Var1语句,它也不会报告任何错误。因此,下面的代码可以正常工作

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

function()
参考:这样看

NameError:未定义名称“a”

解释

可能是因为在Python中,无法使用equals方法比较两个字符串,所以会出现此错误。没有这样的方法存在

示例:比较两个字符串


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

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

>>> A.__eq__(B)
True
然而,正确的做法是:

>>> len(A)
5

>>> A == B
True
说到这里,我不确定你想用length函数实现什么。您说过您的代码正在检查两个字符串的前3个字母是否相同-您可以这样做:

A = "car123"
B = "car456"

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

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

请修复缩进。我们不可能知道函数中有什么。使用4个空格获得一个代码块,另外4个空格显示函数的缩进。你确定你在这里写的是Python,而不是Java之类的东西吗?除了长度的问题之外,字符串在Python中也没有.equals方法。我想这可能是问题所在,因为我每天都用两个语言Python和c编写代码,所以我可能只是混淆了twothansk的帮助,我不知道为什么,但我得到了两个混淆的c和Python,只有在你们的帮助下,它才变得清晰,但我仍然不明白为什么代码会像原来那样工作……我不明白为什么它只是停止了,但谢谢,我会做必要的更改