【发布时间】:2013-12-16 15:34:10
【问题描述】:
我正在编写一个调用其他人编写的代码的框架(该框架播放 Monopoly 并调用玩家 AI)。 AI 告诉框架在函数调用的返回值中要做什么。
我想检查返回值的类型以确保它们不会破坏我的框架代码。
例如:
instructions = player.sell_houses()
# Process the instructions...
在这个例子中,我希望玩家返回一个元组列表,例如:
[(Square.BOW_STREET, 2), (Square.MARLBOROUGH_STREET, 2), (Square.VINE_STREET, 1)]
是否有一种简单(ish)的方式来验证人工智能返回给我的内容?我在想象这样的事情:
instructions = player.sell_houses()
if not typecheck(instructions, [(str, int)]):
# Data was not valid...
我不只是想检查返回的数据是否是一个列表。我想检查它是否是特定类型的列表。在示例中,它是一个元组列表,其中每个元组包含一个字符串和一个整数。
我看到很多 Python 类型检查问题的答案都是“类型检查是邪恶的”。如果是这样,在这种情况下我应该怎么做?似乎没有任何东西可以阻止 AI 代码返回任何东西,我必须能够以某种方式验证或处理它。
编辑:我可以通过编写函数来“手动”检查。对于上面的instructions,它可能是这样的:
def is_valid(instructions):
if not isinstance(instructions, list): return False
for item in instructions:
if not isinstance(item, tuple): return False
if len(item) != 2: return False
if not isinstance(item[0], str): return False
if not isinstance(item[1], int): return False
return True
但在这种情况下,我必须为我需要验证的每种类型的值编写一个类似的复杂验证函数。所以我想知道是否存在一个更通用的验证函数或库,我可以给它一个表达式(如[(str, int)]),它会验证它而无需手动完成工作。
【问题讨论】:
标签: python typechecking