UnboundLocalError:分配前引用了局部变量'di'

问题描述 投票:-2回答:3

我知道这个问题有很多问题,但是在互联网上寻找解决方案已有一段时间之后,仍然没有任何效果。这是我的代码:

def posicio_relativ(x1,y1,z1,x2,y2,z2):
    if x1<x2:
        di='dreta'
    if x1>x2:
        di='esquerra'
    if y1<y2:
        ss='sobre'
    if y1>y2:
        ss='sota'
    if z1<z2:
        dd='davant'
    if z1>z2:
        dd='darrera'
    return di, ss, dd

我是使用python的初学者,所以我会很感激任何帮助或解释。

谢谢你!

P.D:对不起我的英语,我来自西班牙!

python variables global
3个回答
2
投票

您需要在di语句之前声明值ssddif,并将它们初始化为空白字符串。例如,如果x1 == x2,则di将永远不会初始化。

def posicio_relativ(x1,y1,z1,x2,y2,z2):

    di = ''
    ss = ''
    dd = ''

    if x1<x2:
        di='dreta'
    if x1>x2:
        di='esquerra'
    if y1<y2:
        ss='sobre'
    if y1>y2:
        ss='sota'
    if z1<z2:
        dd='davant'
    if z1>z2:
        dd='darrera'
    return di, ss, dd

1
投票

您必须确保在所有案例中都分配了变量,情况并非如此x1 == x2 y1 == y2 z1 == z2已覆盖。所以你可以做:

def posicio_relativ(x1,y1,z1,x2,y2,z2):

    di='dreta'
    if x1>x2:
        di='esquerra'

    ss='sobre'
    if y1>y2:
        ss='sota'

    dd='davant'
    if z1>z2:
        dd='darrera'

    return di, ss, dd

取决于这些情况下您的不良行为,您可能需要做一些不同的事情


0
投票

变量di在以下if语句之一中创建:

   if x1<x2:
        di='dreta'
    if x1>x2:
        di='esquerra'

问题是,如果x1 == x2,则您的代码不会进入任何if语句。

因此,当您调用return di, ss, dd时,变量di不存在。

一种快速解决方案是将您的if语句之一设置为x1 >= x2x1 <= x2

© www.soinside.com 2019 - 2024. All rights reserved.