传递None而不是Series来运行

时间:2015-08-12 20:48:08

标签: python unit-testing

我有一个模块fi,其中定义了以下类:

class CashFlows(Asset):

   def __init__(self, amounts : pandas.Series, probabilities : pandas.Series = None):
       amounts = Asset.to_cash_flows()

       if probabilities is None:
           probabilities = pandas.Series([1]*len(amounts), index=amounts.index)

然后我在其中使用了此方法的另一个类Bond(fi.Asset),这是调用CashFlows的地方:

def to_cash_flows(self, notional : float = 100.0) -> fi.asset.CashFlows:
    #Bunch of stuff here which is not related
    series = pandas.Series(list_of_data, indices_of_data)
    return fi.CashFlows(series)

我收到错误obiwan.ObiwanError:__init__(probabilities) is None but should be <class 'pandas.core.series.Series'>,但我认为我正在使用if语句解决这种错误的可能性。 obiwan只是我在单元测试中使用的Python类型检查包。

谢谢

1 个答案:

答案 0 :(得分:1)

根据obiwan PyPI page

您可以使用集合指定备用约束类型:

def example5(x: {int,float}):
    ...

从表面上看,你似乎应该替换:

probabilities : pandas.Series = None

使用:

probabilities : {pandas.Series, type(None)} = None

这将告诉obiwan,参数是可接受的值。

obiwan实际上并没有将转换为函数本身,并不关心将参数与None进行比较的if语句。它只关注函数声明。