我正在尝试对我的 python 代码执行良好的输入有效性检查,但我也希望它简洁。也就是说,我不想使用的解决方案是这个:
def some_func(int_arg, str_arg, other_arg):
try:
int_arg = int(int_arg)
except TypeError, ValueError
logging.error("int_arg must respond to int()")
raise TypeError
try:
if str_arg is not None:
str_arg = str(str_arg)
except TypeError
logging.error("Okay, I'm pretty sure this isn't possible, bad example")
raise TypeError
if other_arg not in (VALUE1, VALUE2, VALUE3):
logging.error("other arg must be VALUE1, VALUE2, or VALUE3")
raise TypeError
这只是太多的代码和太多的空间来检查 3 个参数。
我目前的做法是这样的:
def some_func(int_arg, str_arg, other_arg):
try:
int_arg = int(int_arg) #int_arg must be an integer
str_arg is None or str_arg = str(str_arg) #str_arg is optional, but must be a string if provided
assert other_arg in (VALUE1, VALUE2, VALUE3)
catch TypeError, ValueError, AssertionError:
logging.error("Bad arguments given to some_func")
throw TypeError
我失去了我的日志消息的特殊性,但在我看来,这更简洁,老实说更具可读性。
我特别想知道的一件事是断言语句的使用。我读过不鼓励使用断言作为检查输入有效性的一种方式,但我想知道这是否是一种合法的使用方式。
如果没有,是否有类似的方法来执行此检查(或一般进行此验证)仍然非常简洁?