TypeError:python需要一个整数

TypeError:python需要一个整数,python,datetime,sys,Python,Datetime,Sys,这是我的代码: today = datetime.date.today() if len(sys.argv) > 1: arg_month = sys.argv[1] arg_year = sys.argv[2] print arg_month print arg_year lastMonth = datetime.date(day=1, month=arg_month, year=arg_year) first = lastMonth +

这是我的代码:

today = datetime.date.today()

if len(sys.argv) > 1:
    arg_month = sys.argv[1]
    arg_year = sys.argv[2]
    print arg_month
    print arg_year
    lastMonth = datetime.date(day=1, month=arg_month, year=arg_year)
    first = lastMonth + datetime.timedelta(month=1)
    lastMonth = lastMonth.strftime("%Y%m")
    curMonth = first.strftime("%Y%m")   
else:
    first = datetime.date(day=1, month=today.month, year=today.year)
    lastMonth = first - datetime.timedelta(days=1)
    lastMonth = lastMonth.strftime("%Y%m")
    curMonth=(time.strftime("%Y%m"))
以下是我运行代码的方式: python lelan.py 01 2015

输出为:

01
2015
Traceback (most recent call last):
  File "lelan.py", line 22, in <module>
    lastMonth = datetime.date(day=1, month=arg_month, year=arg_year)
TypeError: an integer is required
01
2015
回溯(最近一次呼叫最后一次):
文件“lelan.py”,第22行,在
lastMonth=datetime.date(天=1,月=arg\u月,年=arg\u年)
TypeError:需要一个整数

如何解决这个问题?谢谢。

这是因为来自
sys.argv
的参数是字符串。您需要将它们转换为整数:

arg_month = int(sys.argv[1])
arg_year = int(sys.argv[2])

从命令行参数获取的所有项都是字符串;命令行没有任何类型系统,无法区分字符串和其他任何内容。因此,
arg\u month
arg\u year
是字符串。您需要将它们显式转换为
int

int(arg_month)

你可能想考虑使用它,这可以简化你:

parser = ArgumentParser()
parser.add_argument('month', type=int)
...
args = parser.parse_args()
print(args.month)

我认为您可能需要将正在访问的索引更改为0和1,而不是1和2。在python中,列表中的计数从0(第一个元素)开始,依此类推。@adarsh,no sys.argv[0]是脚本的名称相对路径。True!没有注意到它是sys.argv。你只需要将变量转换成整数。谢谢@luk32,我知道了。