类型错误:'str' 对象不能被解释为整数 python for 循环

noo*_*oob 0 python datetime loops for-loop

我正在尝试创建一个函数,该函数返回从给定年份和给定月份开始到今天的年份和月份的数据。为简单起见,我用外循环和内循环的打印语句替换了我希望我的函数执行的操作。我收到错误 TypeError: 'str' 对象不能解释为整数

定义函数

def frequency_database(df,start_month,start_year):
    data = pd.DataFrame([])
    import datetime
    start_month=int(start_month)
    start_year=int(start_year)
    today = datetime.date.today()
    today_year=today.strftime('%Y')

    for y in range(start_year,today_year):
        print('Outer loop enter for year', y)
        Some function here which I want to do.............
        for x in range(start_month,13):
            print('Inner loop enter for month number',x)
            Some function here which I want to do.............
Run Code Online (Sandbox Code Playgroud)

调用功能

frequency_database(df,1,2015)
Run Code Online (Sandbox Code Playgroud)

错误

类型错误:“str”对象不能解释为整数

按要求进行堆栈跟踪

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-37-06567ae5d027> in <module>
     12             print('Inner loop enter for month number',x)
     13 
---> 14 frequency_database(df,1,2015)

<ipython-input-37-06567ae5d027> in frequency_database(df, start_month, start_year)
      7     today_year=today.strftime('%Y')
      8 
----> 9     for y in range(start_year,today_year):
     10         print('Outer loop enter for year', y)
     11         for x in range(start_month,13):

TypeError: 'str' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)

han*_*olo 5

问题是你试图给出range一个strwhich is today_year=today.strftime('%Y')

只需更换线路

today_year=today.strftime('%Y')
Run Code Online (Sandbox Code Playgroud)

today_year=int(today.strftime('%Y'))
Run Code Online (Sandbox Code Playgroud)

正如Stargazer指出的那样,你可以这样做,

today_year = today.year
Run Code Online (Sandbox Code Playgroud)

而不是转换strint