在Python dict中格式化日期
我有一些触发PDF生成的代码。它接受包含PDF有效负载的python dict 有很多日期需要显示在PDF中,但并非所有文档都包含所有PDF。在发送到PDF之前,我需要格式化日期。目前,我的代码使用了很多不同的IF语句来捕获所有可能的日期并在dict中格式化它们在Python dict中格式化日期,python,Python,我有一些触发PDF生成的代码。它接受包含PDF有效负载的python dict 有很多日期需要显示在PDF中,但并非所有文档都包含所有PDF。在发送到PDF之前,我需要格式化日期。目前,我的代码使用了很多不同的IF语句来捕获所有可能的日期并在dict中格式化它们 有没有更符合python的方法呢?您不需要任何if语句 Python中的一种常用方法是EAFP(请求原谅比请求许可更容易),而不是LBYL(三思而后行)。因此你应该 准备一个元组或您希望位于有效负载中的键列表dict,并使用try ex
有没有更符合python的方法呢?您不需要任何
if
语句
Python中的一种常用方法是EAFP(请求原谅比请求许可更容易),而不是LBYL(三思而后行)。因此你应该
准备一个元组或您希望位于有效负载中的键列表
dict,并使用try except
,以防其中一个键丢失
if not all(key in payload for key in payloads[template]):
raise InvalidPayloadException
if 'order_date' in payload:
payload['order_date'] = self._get_formatted_date(payload['order_date'])
if 'payment_date' in payload:
payload['payment_date'] = self._get_formatted_date(payload['payment_date'])
if 'shipped_date' in payload:
payload['shipped_date'] = self._get_formatted_date(payload['shipped_date'])
您不需要任何
if
语句
Python中的一种常用方法是EAFP(请求原谅比请求许可更容易),而不是LBYL(三思而后行)。因此你应该
准备一个元组或您希望位于有效负载中的键列表
dict,并使用try except
,以防其中一个键丢失
if not all(key in payload for key in payloads[template]):
raise InvalidPayloadException
if 'order_date' in payload:
payload['order_date'] = self._get_formatted_date(payload['order_date'])
if 'payment_date' in payload:
payload['payment_date'] = self._get_formatted_date(payload['payment_date'])
if 'shipped_date' in payload:
payload['shipped_date'] = self._get_formatted_date(payload['shipped_date'])
使用循环
for key in ('order_date', 'payment_date', 'shipped_date'):
try:
payload[key] = self._get_formatted_date(payload[key])
except KeyError:
print('{} not in payload dict'.format(key))
使用循环
for key in ('order_date', 'payment_date', 'shipped_date'):
try:
payload[key] = self._get_formatted_date(payload[key])
except KeyError:
print('{} not in payload dict'.format(key))
您可以创建一个包含所有可能日期的列表,以对其进行格式化和迭代
for date_key in ('order_date', 'payment_date', 'shipped_date'):
if date_key in payload:
payload[date_key] = self._get_formatted_date(payload[date_key])
您可以创建一个包含所有可能日期的列表,以对其进行格式化和迭代
for date_key in ('order_date', 'payment_date', 'shipped_date'):
if date_key in payload:
payload[date_key] = self._get_formatted_date(payload[date_key])
您可以创建日期键的元组并使用for循环
dates = [
"order_date",
"payment_date",
"shipped_date"
]
for d in dates:
if d in payload:
payload[d] = self._get_formatted_date(payload[d])
您可以创建日期键的元组并使用for循环
dates = [
"order_date",
"payment_date",
"shipped_date"
]
for d in dates:
if d in payload:
payload[d] = self._get_formatted_date(payload[d])
异常处理不是一个有条件的过程,因此检查是否存在异常更为简单。请参阅以获取更多解释,但不太像Pythonic,请参阅OP以获取Pythonic方法。它还取决于预期会发生什么,现有密钥还是缺少密钥。当您知道异常将是异常的(或者当您可能有竞争条件时,这不是重点)时,EAFP就可以了。不,盲目地使用可能昂贵的try/excepts仅仅是因为有人曾经说它是“pythonic”,而有一种更便宜的解决方案,并且没有可能的种族条件是绝对不pythonic的。EAFP很好,不知道为什么人们对它有这么大的问题。这个答案很好,因为它展示了问题的另一个视角。异常处理不是一个有条件的过程,所以检查是否存在异常更为清晰。请参阅以获取更多解释,但不太像Pythonic,请参阅OP以获取Pythonic方法。它还取决于预期会发生什么,现有密钥还是缺少密钥。当您知道异常将是异常的(或者当您可能有竞争条件时,这不是重点)时,EAFP就可以了。不,盲目地使用可能昂贵的try/excepts仅仅是因为有人曾经说它是“pythonic”,而有一种更便宜的解决方案,并且没有可能的种族条件是绝对不pythonic的。EAFP很好,不知道为什么人们对它有这么大的问题。这个答案很好,因为它展示了问题的另一个视角。