gpt4 book ai didi

Python:在这个例子中抛出异常是正确的用例吗?

转载 作者:行者123 更新时间:2023-11-28 21:45:50 24 4
gpt4 key购买 nike

我想知道抛出异常是否是与用户沟通的最佳方式,以防用户是另一个程序员。

我正在开发一个小型库来创建基于文本的游戏(想想 Dwarf Fortress,但非常简单)。当然,我想让东西在 map 内移动。它非常简单,文档字符串也非常完整,所以读起来应该很好看。

def move(self, tile):
"""Move the object to a tile.
That means: unlink the piece from its current tile and link it
to the new tile.

Raise CharacterIsNotOnATileError if piece didn't already
have an associated tile, CharacterIsNotOnThisBoardError if
the destinity tile is not on the same board as the current tile,
OutOfBoard error if destinity tile is falsey (most probably
this means you're tring to move somewhere outside the map)
"""
if tile.piece is not None:
raise PositionOccupiedError(tile)
if not self.home_tile:
raise PieceIsNotOnATileError
if self.home_tile.board is not tile.board:
raise PieceIsNotOnThisBoardError
if not tile:
raise OutOfBoardError

self.home_tile.piece = None
tile.piece = self

这个结构不好吗?我认为它读起来很好:当用户试图移动他自己的一 block 时,他可以这样做:

try:
character.move(somewhere)
except PositionOcuppiedError:
character.punish # cause i'm in hardcore
except OutOfBoardError:
character.kill # cause we were in a floating world and the
# character just fell off

在这样实现的库中还有更多逻辑,其中代码尝试 做某事但如果做不到,它将抛出异常。这个可以吗?或者也许我应该返回错误代码(例如,作为整数)。

最佳答案

这个用例似乎适用于异常(exception)情况。有人说:

"Exceptions should be exceptional"

但在 Python 中,使用异常来执行流控制并不被视为不良做法(阅读更多 "Is it a good practice to use try except else in python")。

此外,请注意,如果放置在重复调用的函数中,在 Python 中抛出和检查异常可能会对性能产生负面影响。除非您正在开发一款拥有数百名玩家的快节奏游戏,否则它不应该是您的主要关注点。您可以阅读有关捕获异常的性能相关问题的更多信息 in this topic on Stack Overflow .

就个人而言,作为一名程序员,我宁愿处理异常(在使用 Python 编程时),也不愿处理错误代码或类似的东西。另一方面,如果它们以错误代码的形式给出,那么处理范围广泛的返回状态并不难——您仍然可以模仿 switch-case 构造,例如使用dictionary with callable handlers as values .

关于Python:在这个例子中抛出异常是正确的用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38851047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com