繁体   English   中英

Python:在赋值之前引用

[英]Python: Referenced before assignment

我收到以下错误local variable 'ticket_reservation_expired' referenced before assignment 有谁知道如何解决这个问题?

我认为解决方案可能是在调用函数之前分配ticket_reservation_expired = "" ,但我想知道这是否是解决此问题的最佳方法?

helpers.py

def ticket_reservation_expired(request, timestamp_of_reservation):
    """
    * Calculate the latest possible time where tickets are still reserved.
    * Check that 'created' timestamp of reservation item is not expired.
    * If expired, error message is being generated and redirect occurs.
    """
    latest_time_before_expired = timezone.now() - timedelta(
        minutes=settings.MINUTES_TICKET_RESERVATION
    )
    if timestamp_of_reservation < latest_time_before_expired:
        messages.add_message(
            request,
            messages.ERROR,
            _("Ticket reservation is too far in the past.")
        )
        return True

视图.py

ticket_reservation_expired = ticket_reservation_expired(
    self.timestamp_of_reservation
)
if ticket_reservation_expired:
    return redirect(
        'events:detail',
        organizer=self.organizer,
        event=self.event,
    )

您的函数仅在满足特定条件时返回一个值。 当它不满足时,什么都不返回。 好的风格是要么从不返回值,要么总是返回一个值。 因为如果满足条件你返回 True,当它不满足时返回 False 并且你的错误应该消失。

此外,在您发布的代码中,您将变量和函数命名为相同的名称,这会给您带来无穷无尽的麻烦。

问题是如果函数没有返回任何东西,那么它会抛出一个错误,因为变量从未定义过,因为变量的初始化取决于函数的返回值。 只需用None初始化变量

ticket_reservation_expired_var = None
ticket_reservation_expired_var = ticket_reservation_expired(
    self.timestamp_of_reservation
)
if ticket_reservation_expired_var:
    return redirect(
        'events:detail',
        organizer=self.organizer,
        event=self.event,
    )

您可以做的是将该名称作为函数内部的全局引用:

global ticket_reservation_expired

这是函数的第一行。 或者,向函数ticket_reservation_expired添加另一个参数,并在调用函数时将其传入,以便将值有效地“转移”到函数作用域。 但是,对变量的更改只会在函数的作用域内生效。 因此,如果您需要在函数返回后进行任何更改“保存”自己,则可以选择global

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM