use*_*743 0 python django scope loops
我有一种方法可以通过检查前三个字母/数字并确保它们在继续之前相同来工作
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
Run Code Online (Sandbox Code Playgroud)
在它使用之前,现在它停止了,我收到了这个错误。
Exception Type: UnboundLocalError
Exception Value:
local variable 'a' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
几周前我从未使用过它并没有改变任何东西,所以我将 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
Run Code Online (Sandbox Code Playgroud)
现在我收到此错误。
Exception Type: NameError
Exception Value:
name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)
然后我删除了全局行并把这个
a = "P"
Run Code Online (Sandbox Code Playgroud)
并得到以下错误
str object has no attribute length() or len()
Run Code Online (Sandbox Code Playgroud)
现在让我感到困惑的是这段代码如何停止工作以及为什么它不能识别字符串对象具有 len() 方法。主要是我迷失了我的代码是如何在两周内从工作变为不工作的。
Python 字符串 len() 方法
句法
以下是 len() 方法的语法?
len( str )
Run Code Online (Sandbox Code Playgroud)
例子
str = "this is string example....wow!!!";
print("Length of the string: ", len(str))
Run Code Online (Sandbox Code Playgroud)
当我们运行上面的程序时,它会产生以下结果?
Length of the string: 32
Run Code Online (Sandbox Code Playgroud)
UnboundLocalError:赋值前引用了局部变量“a”
解释
这是因为,即使存在a并且b存在,您也在函数的名称a和b内部使用赋值语句combineProcess()。自然地,这会在函数的作用域内创建一个名为aand的变量b。
Python 解释器在模块加载时看到这一点,并决定全局范围的a和b不应在局部范围内使用,这会导致在本地分配变量之前尝试引用变量时出现问题。
例子
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print("Result One")
Var1 =- 1
function()
Run Code Online (Sandbox Code Playgroud)
如果您运行此程序,则会出现以下错误。
UnboundLocalError: local variable 'Var1' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
由于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()
Run Code Online (Sandbox Code Playgroud)
然后它工作正常。
请注意,如果我们Var1 =- 1在if条件检查之前移动语句,那么即使您不使用global Var1语句,它也不会报告任何错误。所以,下面的代码工作正常。
Var1 = 1
Var2 = 0
def function():
Var1 =- 1
if Var2 == 0 and Var1 > 0:
print("Result One")
function()
Run Code Online (Sandbox Code Playgroud)
参考:请参阅此 SO答案。
NameError: 名称 'a' 未定义
解释
您可能会收到此错误,因为在 Python 中,您无法使用equals()方法比较两个字符串。不存在这样的方法。
示例:比较两个字符串
您可以使用> , < , <= , <= , == , !=来比较两个字符串。Python 按字典顺序比较字符串,即使用字符的 ASCII 值。例如,要比较两个字符串是否相等,您可以执行以下操作。
if string1 == string2:
// do something
Run Code Online (Sandbox Code Playgroud)