簡體   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