我正在编写一个 AI 状态空间搜索算法,并且我有一个通用类,可用于快速实现搜索算法。子类将定义必要的操作,其余的由算法完成。
这是我卡住的地方:我想避免一遍又一遍地重新生成父状态,所以我有以下函数,它返回可以合法应用于任何状态的操作:
def get_operations(self, include_parent=True): ops = self._get_operations() if not include_parent and self.path.parent_op: try: parent_inverse = self.invert_op(self.path.parent_op) ops.remove(parent_inverse) except NotImplementedError: pass return ops
invert_op 函数默认抛出。
有没有比捕获异常更快的方法来检查函数是否未定义?
我正在考虑检查目录中是否存在的东西,但这似乎不对。hasattr 是通过调用 getattr 并检查它是否引发来实现的,这不是我想要的。
是getattr()的,用于获取属性,并callable()验证它是一种方法:
getattr()
callable()
invert_op = getattr(self, "invert_op", None) if callable(invert_op): invert_op(self.path.parent_op)
请注意,getattr()当属性不存在时通常会引发异常。但是,如果您指定默认值(None在本例中为 ,),它将改为返回该值。
None