首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数中定义全局时获取UnboundLocalError

在函数中定义全局时获取UnboundLocalError
EN

Stack Overflow用户
提问于 2020-09-10 14:27:10
回答 2查看 24关注 0票数 2

我知道这是非常严重的错误,但我可以找到我的错误。我有带有周边数据的数据,例如:

代码语言:javascript
复制
>>>name    perimeter
0  al      24.5
1  dl      43.7
2  yl      1222.4
3  pl      213.2
4  kl      120
...

我想检查什么是中间周长,然后根据周长中值添加新列。我在函数之前定义中值,然后将中值定义为函数内部的全局值:

代码语言:javascript
复制
per_median=df['perimeter'].median()

def z(row):
    global per_median
    if row['perimeter'] > per_median:
        val = 'yes'
    elif row['perimeter'] < per_median:
        val = 'no'
    return val

df['perimeter_warning'] = df.apply(z,axis=1)

由于某些原因,即使在函数中使用全局,我仍然会得到以下错误:

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

我做错什么了?我被切掉了,认为它是全球性的,可以解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-10 14:41:57

尝试在代码中再添加一个场景

如果行“周长”== per_median:然后为val设置一些值。

或者,如果您不想处理这个问题,请尝试在使用之前为val分配一个默认值。

票数 1
EN

Stack Overflow用户

发布于 2020-09-10 14:45:06

处理缺少row['perimeter']等于per_median的情况,因此没有设置变量val

编辑了处理该场景的代码:

代码语言:javascript
复制
import pandas as pd
import numpy as np


df = pd.DataFrame({'name':['al', 'dl', 'yl', 'pl', 'kl'],
'perimeter':[24.5, 43.7, 1222.4, 213.2, 120]})


per_median=df['perimeter'].median()

def z(row):
    global per_median
    if row['perimeter'] > per_median:
        val = 'yes'
    elif row['perimeter'] < per_median:
        val = 'no'
    else:
        val = 'equals'
    return val

df['perimeter_warning'] = df.apply(z,axis=1)

print(df)

输出:

代码语言:javascript
复制
  name  perimeter perimeter_warning
0   al       24.5                no
1   dl       43.7                no
2   yl     1222.4               yes
3   pl      213.2               yes
4   kl      120.0            equals
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63831841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档