接受日期的字符串或整数

时间:2015-12-23 12:18:15

标签: python

如何检查我在函数中传递的参数是否是python中的整数,字符串或日期?

我的函数可以接受字符串或整数作为日期:

def check(self, dat1):

    # print(self.path)
    # dat1 = raw_input("data = ")
    print(type(dat1))

    try:
        datetime.datetime.strptime(dat1, '%Y-%m-%d')

    except ValueError:

        try:
            int(dat1)

        except ValueError:
            print("str it is")

        else:

            print(dat1)
            rand1 = random.randint(int(dat1) - (int(dat1) % 7), int(dat1) + (int(dat1) % 7))
            print(rand1)
            return rand1
    else:
        print("date it is")
check(100)

当我传入一个整数时,我收到这样的错误:

    datetime.datetime.strptime(dat1, '%Y-%m-%d')
TypeError: must be string, not int

我知道有一个类似的问题,但它适用于raw_input()而不适用于参数。

2 个答案:

答案 0 :(得分:2)

datetime.datetime.strptime()方法的第一个参数必须是一个字符串。您传递的是整数,这意味着会引发TypeError

也抓住那个异常,而不仅仅是ValueError(如果传入正确的类型但是无法解析字符串,则抛出该异常):

try:
    datetime.datetime.strptime(dat1, '%Y-%m-%d')
except (ValueError, TypeError):

答案 1 :(得分:0)

您可以尝试使用isinstance

>>> my_str = "Foo"
>>> isinstance(my_str, str)
True
>>> my_int = 1234
>>> isinstance(my_int, int)
True
>>> my_date = datetime.date.today()
>>> isinstance(my_date, datetime.date)
True
# Assuming you used "import datetime" at the top of your file

然后,您可以使用if-elif结构来引发适当的异常。