2017-07-03 157 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