基于变量类型的条件字符串表示

时间:2017-12-04 21:04:44

标签: python string date datetime format

我想创建一个包含datetime值的None对象的字符串表示形式。到目前为止,我提出了一个解决方案,但我正在寻找一种更好/更清洁的方法。

我们说我有以下两个变量:

import datetime as dt

a = None
b = dt.datetime(2017, 11, 30)


def str_format(str):
    return '{:%Y-%m-%d}'.format(str)

以下内容将返回格式化字符串:

str_format(b)
'2017-11-30'

但是以下内容会返回错误:

str_format(a)
TypeError: unsupported format string passed to NoneType.__format__

到目前为止,我可以使用以下解决方案:

def str_format(str):
    if isinstance(str, type(None)) is False:
        return '{:%Y-%m-%d}'.format(str)
    else:
        return '{}'.format(str)

str_format(a)
'None'

str_format(b)
'2017-11-30'

但是,我正在寻找一种更有效/更清晰的函数编写方式。

2 个答案:

答案 0 :(得分:2)

这些类型的事物经常被包裹在try/except

def str_format(str):
  try:
    return '{:%Y-%m-%d}'.format(str)
  except TypeError:
    # unrecognized type, return blank or whatever you want to return
    return ''

this问题的答案解释了为什么您通常使用try/except而不是条件检查。

答案 1 :(得分:1)

你的功能过于复杂。 None是一个单身,因此对它进行测试的pythonic方法只是is None

只需使用三元表达式在一行中执行:

def str_format(s):
   return str(s) if s is None else '{:%Y-%m-%d}'.format(s)

或者如果传递None则返回默认日期(例如:1/1/2010):

def str_format(s):
   return '{:%Y-%m-%d}'.format(s or dt.datetime(2010, 1, 1))

作为旁注不要使用str作为变量名,因为它是python字符串类型。