我有一个方法可以通过检查前三个字母/数字来确保它们是相同的,然后继续这样做
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()方法。主要是我失去了我的代码从工作到两周不工作的方式。
答案 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
UnboundLocalError:赋值前引用的局部变量'a'
<强>解释强>
这是因为,即使存在a
和b
,您也会在函数{{}内的名称a
和b
上使用赋值语句1}}。当然,这会在函数的范围内创建一个名为combineProcess()
和a
的变量。
Python解释器在模块加载时看到这一点,并决定不应在本地范围内使用b
和a
的全局范围,这会在您尝试引用时导致问题变量在本地分配之前。
示例强>
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个字符,并将这些切片相互比较。