2017-07-03 39 views
-1

我試圖構建folloiwng線是從假期包對象:我想將它拆分爲以下Python的字符串添加在一起

holidays.DE() 

假期.DE()作爲參數。作爲字符串它不工作嘗試它已經接收以下錯誤消息:

HOLIDAYS_German =假期+選項類型錯誤:不支持的操作數類型(一個或多個)爲+:「模塊」和「STR」

如何我可以解決嗎?

的代碼如下所示:

import datetime as dt 
import holidays 

def BDCTest(date1,date2,Option): 

    HOLIDAYS_German = holiday+Option 

    for i in range((date2 - date1).days + 1): 
     nextday = date1 + dt.timedelta(days=i) 
     if nextday not in HOLIDAYS_German: 
      print(nextday.strftime('%d-%m-%y')) 

if __name__ == '__main__': 

    date1 = dt.datetime.strptime('22-12-16', '%d-%m-%y') 
    date2 = dt.datetime.strptime('22-12-17', '%d-%m-%y') 
    Option = '.DE' 

    Test = BDCTest(date1,date2, Option) 
+0

如果你真的想要走你的路線,你可以做'exec(「%s()」%HOLIDAYS_German)'這是好的,如果你不暴露給用戶輸入。它涉及到一行代碼的添加,但是很髒。 –

回答

2

只是把兩個字符串不使Python執行這些字符串。

動態屬性訪問通過getattr() function完成; DE只是holidays模塊上的屬性,一個正好是調用的:

Option = 'DE' 
HOLIDAYS_German = getattr(holiday, Option)() 

所以getattr()檢索holiday對象(模塊)的DE屬性,並且結果被調用。請注意,Option確實是而不是.開頭!

+0

非常感謝。這是我正在尋找的。 – MCM