我正在开发一个函数,它将不同种类的date_formats作为参数并将其分派给一个函数,该函数负责解析这种格式
换句话说:
def parse_format(date_format):
# descision making happens here
try:
from_timestamp(date_format)
except:
pass
try:
from_dateformat(date_format)
except:
pass
def from_timestamp(format):
# raise if not in charge
def from_dateformat(format):
# raise if not in charge
def from_custom_format(format):
# raise if not in charge
目前,parse_format有多个try / except块。这是要走的路,还是有更明显的方法呢?此外,我如何处理每个函数调用失败的情况?
答案 0 :(得分:3)
我会做这样的事情:
class UnrecognizedFormatError(Exception):
pass
def parse_format(date_format):
methods = (from_timestamp, from_dateformat)
for method in methods:
try:
return method(date_format)
except:
pass
raise UnrecognizedFormatError
但也有一些关键点:
except
是错误的,因为可能会从意外的位置抛出异常,例如内存不足或脚本中的键盘中断。因此,请使用except SomeException as e
表单,并使用特定的例外类型。UnrecognizedFormatError
,允许函数的用户做出适当的响应。答案 1 :(得分:0)
好吧,我认为这是一个尝试/除了/ else / finally的好地方 - 否则会抓住每个函数调用失败的最后一个案例,并且最终'正在运行try / except语句中发生的任何事情。如果您的例外被适当选择,那么它将为您选择正确的功能。
另外,我猜这是一次学习练习,因为你在date.strftime()
def from_timestamp(format):
# raise if not in charge
def from_dateformat(format):
# raise if not in charge
def from_custom_format(format):
# raise if not in charge
def parse_format(date_format):
# decision making happens here
try:
from_timestamp(date_format)
except(FirstException):
from_dateformat(date_format)
except(SecondException):
from_custom_format(date_format)
else:
whatever_you_do_if_it_all_goes_wrong()
finally:
thing_that_happens_regardless_of_what's_called()