【Python】UnboundLocalError: local variable 'l' referenced before assignment

01  在程序中设置的sum_Logical属于全局变量,而在函数 calculate中没有sum_Logical的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR 或者 Unbound-LocalError,这取决于python 版本。)
02     如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum_Logical的定义和赋值,所以报错。
03  从下面两个程序看 单独的访问或者修改全局变量,并不报错~
04  #!/usr/bin/python
05  import sys
06  sum=5
07  def add(a=1,b=3):
08       print a,b
09       print sum --仅仅访问
10  add(4,8)
11  print sum
12  [root@rac3 python]# python local.py
13  4 8
14  5
15
16  #!/usr/bin/python
17  import sys
18  sum=5
19  def add(a=1,b=3):
20       print a,b
21       sum=b+a  --在函数内部修改
22       print sum
23  add(4,8)
24  [root@rac3 python]# python local.py
25  4 8
26  12
27  下面的程序就会因为“如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum_Logical的定义和赋值,所以报错”
28  #!/usr/bin/python
29  import sys
30  sum=5
31  def add(a=1,b=3):
32       print a,b
33       print sum
34       sum=b+a
35       print sum
36  add(4,8)
37  print sum
38  [root@rac3 python]# python local.py
39  4 8
40  Traceback (most recent call last):
41    File "local.py", line 10, in ?
42      add(4,8)
43    File "local.py", line 6, in add
44      print sum
45  UnboundLocalError: local variable 'sum' referenced before assignment
46  遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用:global 关键字,在函数中声明此变量是全局变量
47  #!/usr/bin/python
48  import sys
49  sum=5
50  print '改变之前:sum=',sum
51  def add(a=1,b=3):
52       global sum
53       print 'add 函数中:sum=',sum
54       sum=b+a
55       print '函数中改变之后:sum= ',sum
56  add(4,8)
57  print '改变之后 sum=',sum
58  [root@rac3 python]# vim local.py
59  改变之前:sum= 5
60  add 函数中:sum= 5
61  函数中改变之后:sum=  12
62  改变之后 sum= 12
时间: 2024-10-03 06:51:43

【Python】UnboundLocalError: local variable 'l' referenced before assignment的相关文章

【python】多线程编程中join函数的用法

在学习python 多线程编程的时候,一定会使用一个函数join,本章内容通过例子讲述join 在多线程编程中有哪些作用.本文使用两段代码演示其功能代码一 import threading, timedef now() :    return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )def func1():    print 'start func1: ' + now() + "\n"    time.

【Python】软件管理工具--pip

  因为项目的原因我需要深入的学习python,后端程序依赖各种各种软件包,比如MySQLdb,新手可能会有些不熟悉 如何快速安装所需要的python 包.常用的python 包安装和管理有 easy_install, setuptools, pip,distribute. 本文则介绍pip---"A tool for installing and managing Python packages."安装pip 先要获取脚本 get-pip.py   wget https://boot

【Python】python 日期操作

datetime模块定义了下面这几个类: datetime.date:表示日期的类.常用的属性有year, month, day.datetime.time:表示时间的类.常用的属性有hour, minute, second, microsecond.datetime.datetime:表示日期时间.datetime.timedelta:表示时间间隔,即两个时间点之间的长度.datetime.tzinfo:与时区有关的相关信息 datetime模块定义了下面这几个类: datetime.date

【Python】常用的字符串函数

##python中有很多字符串函数,将经常使用的列出如下: >>> import string >>> s1='YANGQL' >>> s2='yangql' >>> s3='yangql is learning python string' ##将字符串转换为小写 >>> s1.lower() 'yangql' ##将字符串转换为大写 >>> s2.upper() 'YANGQL' ##大小写互换

【Python】执行系统命令的常见用法

本文总结了使用Python 程序执行系统的几种命令,介绍各个模块的优缺点.os.system模块 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息,如果在命令行下执行,结果直接打印出来 Python 2.6.6 (r266:84292, May 29 2014, 05:49:27) [GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2 Type "help", "copyright", "credit

【Python】模块之subprocess

一 简介    在使用Python 开发MySQL自动化相关的运维工具的时候,遇到一些有意思的问题,本文介绍Python的 subprocess 模块以及如何和MySQL交互具体操作,如启动 ,关闭 ,备份数据库.二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统中执行shell命令那样fork一个子进程执行外部的命令,并且可以连接子进程的output/input/error管道,获取命令执行的输出,错误信息,和执行成功与否的结果. Subproce

【Python】map函数

一 简介    Python 内置了很多非常有用的函数 比如map() ,reduce(),filter(),还有lambda.熟练应用这些函数可以在写python程序的时候构建精简的代码.本文先来了解map函数.二 使用  用法 map(func, seq1[, seq2,-]) map接收两个参数,第一个参数是函数名,第二个是一个或多个可迭代的序列,返回的是一个集合.运行时,map()将func作用于序列中的每一个元素,并将结果作为一个list返回.如果func为None,作用同zip().

【Python】浅谈 multiprocessing

一前言     使用python进行并发处理多台机器/多个实例的时候,我们可以使用threading ,但是由于著名的GIL存在,实际上threading 并未提供真正有效的并发处理,要充分利用到多核CPU,我们需要使用多进程.Python提供了非常好用的多进程包--multiprocessing.multiprocessing 可以利用multiprocessing.Process对象来创建一个进程,该Process对象与Threading对象的用法基本相同,具有相同的方法(官方原话:"The

【Python】获取主机ip的方式

最近写后台业务逻辑,要用到获取本机ip地址的方法,记录两个python的实现方式: import socket import struct import fcntl import commands def getLocalIP(): status,output=commands.getstatusoutput("hostname -i") if status : return '127.0.0.1' else : return output def getip(ethname): s=