TypeError:需要一个整数python

Lel*_*say 2 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 + 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"))
Run Code Online (Sandbox Code Playgroud)

这就是我运行代码的方式: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
Run Code Online (Sandbox Code Playgroud)

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

luk*_*k32 9

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

arg_month = int(sys.argv[1])
arg_year = int(sys.argv[2])
Run Code Online (Sandbox Code Playgroud)


dec*_*eze 5

从命令行参数获取的所有项都是字符串; 命令行没有任何类型系统,也无法区分字符串和其他任何内容.所以,arg_month并且arg_year是字符串.你需要int明确地将它们强制转换为:

int(arg_month)
Run Code Online (Sandbox Code Playgroud)

您可能需要考虑使用ArgumentParser,这可以为您简化:

parser = ArgumentParser()
parser.add_argument('month', type=int)
...
args = parser.parse_args()
print(args.month)
Run Code Online (Sandbox Code Playgroud)