【发布时间】:2021-03-24 05:57:04
【问题描述】:
尝试编写API交易算法-我需要检查订单是否已成交,如果已成交,则下新订单,如果订单尚未成交或没有订单,则什么都不做(返回)。仅在有未结订单时才声明包含“已成交”或“未成交”的变量。如果变量为“已填充”,我希望它基本上发送订单,如果变量未定义,我也发送订单,但如果未填写且未定义,则不发送订单(从未发送过订单,即初始运行) ...
原来的问题是即使前一个订单还没有成交,它也会发送第二个订单,所以我在'openOrders'函数中创建了一个显示订单状态的变量。但如果没有订单,则变量未定义。所以我希望它在未定义(无订单)的情况下发送订单,如果变量为“已填充”,则发送订单。
我有这段代码,但第一行把它扔掉了,因为它没有将任何代码识别为未定义。有什么建议吗?
if self.openOrderStatus == None: #<--
# SELL
elif self.openOrderStatus != 'Filled':
return
else:
# SELL
【问题讨论】:
-
您不应该编写代码,其中可能会或可能不会根据某些条件定义变量。这是XY problem。
-
不,你不能。但是我不同意@kaya3,处理此问题的“pythonic”方法是将
if放入try/except并优雅地处理任何NameError异常。另一种(非pythonic)方法是使用getattr()在尝试访问它之前检查它是否存在。 -
这里最明显的解决方案是在创建包含它的实例时将
self.openOrderStatus初始化为None。有什么理由你不能这样做吗? -
...也就是说,如果你让你的
__init__(self):包含self.openOrderStatus = None,异常就变得不可能了。 -
为正常的控制流处理
NameError,对不起,这不是一件明智的事情。如果你这样做,那么如果你打错了,你的程序就会做一些奇怪和意想不到的事情,而不是给你一个有用的错误信息。NameError应该意味着您的程序编写不正确。
标签: python