我有一个方法,通过检查前三个字母/数字,确保它们是相同的,然后继续像这样工作
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()方法。 主要是我失去了我的代码从工作到两周不工作的方式。
请修改你的缩进。 我们不可能知道功能中的内容。 使用4个空格来获取代码块,使用另外4个空格来显示函数的缩进。
你确定你在这里写Python,而不是像Java那样的东西吗? 除了.length()的问题之外,字符串在Python中也没有.equals方法。
我认为这可能是问题因为我每天编写两个语言python和c#所以我可能只是混淆两个
Python String len() Method
句法
以下是len()方法的语法?
len( str )
例
str ="this is string example....wow!!!";
print("Length of the string:", len(str))
在运行上述程序的时候,产生以下结果?
Length of the string: 32
参考:Python String len()方法
UnboundLocalError: local variable 'a' referenced before assignment
说明
这是因为,即使存在a和b,您也在函数combineProcess()内的名称a和b上使用赋值语句。当然,这会在函数的范围内创建一个名为a和b的变量。
Python解释器在模块加载时看到这一点,并决定不应在本地作用域内使用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 =- 1语句之前的条件检查Var1 > 0,报告错误。
但是如果我们修改代码如下。
Var1 = 1
Var2 = 0
def function():
global Var1
if Var2 == 0 and Var1 > 0:
print("Result One")
Var1 =- 1
function()
然后它工作正常。
请注意,如果我们在if条件检查之前移动语句Var1 =- 1,那么即使您不使用global Var1语句,它也不会报告任何错误。所以,以下代码工作正常。
Var1 = 1
Var2 = 0
def function():
Var1 =- 1
if Var2 == 0 and Var1 > 0:
print("Result One")
function()
参考:见这个答案。
NameError: name 'a' is not defined
说明
您可能会收到此错误,因为在Python中,您无法使用equals()方法比较两个字符串。没有这样的方法存在。
示例:比较两个字符串
您可以使用> , < , <= , <= , == , !=比较两个字符串。 Python按字典顺序比较字符串,即使用字符的ASCII值。例如,要比较两个字符串是否相等,您可以执行以下操作。
if string1 == string2:
// do something
我假设您来自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个字符,并将这些切片相互比较。
thansk的帮助,我不知道为什么,但我得到了两个混淆(C#和python),只有当你们帮助它变得清晰,但我仍然不明白为什么代码工作原来的方式...... ...我很困惑为什么它只是停止但是谢谢我会做出必要的改变