python - Python:赋值前引用
问题描述
我收到以下错误local variable 'ticket_reservation_expired' referenced before assignment
。任何人都知道如何解决这个问题?
我认为一个解决方案可能是ticket_reservation_expired = ""
在调用函数之前分配,但我想知道这是否是解决这个问题的最佳方法?
助手.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,并且您的错误应该消失。
此外,在您发布的代码中,您将变量和函数命名为相同,这将给您带来无穷无尽的麻烦。
推荐阅读
- python - 使用 pyosmium 将 .pbf 文件转换为 .osm
- typescript - 如何期望(开玩笑)在匹配之前需要处理的对象调用函数
- sql - 如何在 CASE THEN 中使用子查询?
- r - 根据两个数据帧中的三个匹配 ID 查找值 - R
- javascript - 带有来自选择的数组的动态表
- mysql - MySQL:新数据库版本的子查询中的旧 ORDER BY
- excel - 合并两个宏脚本 (WORD)
- shopify - Shopify 主题中的条件下拉消息
- python - Python 3 中的函数和变量
- firebase - 使 Firebase 项目与 FHIR 兼容?