【发布时间】:2017-04-05 12:57:19
【问题描述】:
我正在尝试将玩家添加到 python 中的棋盘,但我正在为实现而苦苦挣扎。
当玩家通过operator 库启动时,玩家对象的属性得到验证。我想在异常发生时显示它们; IE。将每个玩家的启动放在一个 try-except 中。
问题是,当我按照下面的方式进行操作时,我收到一条错误消息:
Traceback(最近一次调用最后一次):文件“./main.py”,第 88 行,在 移动 r.forward() AttributeError: 'NoneType' 对象没有属性 'forward'
在处理上述异常的过程中,又发生了一个异常:
Traceback(最近一次调用最后一次):文件“./main.py”,第 161 行,在 main() 文件“./main.py”,第 141 行,在 main move(choice, player) # 在播放器文件“./main.py”,第 91 行,在 move 中执行移动 再试一次!\n>>> ".format(err, r.initial[0], r.initial[1], r.initial[2])) AttributeError: 'NoneType' 对象没有属性 '初始'
上面提到的操作是由玩家类(player.py)处理的动作。很明显,我以某种方式返回了 NoneType,但我不确定为什么会发生这种情况。
当我在启动期间输入了错误的玩家位置然后添加了正确的位置时,就会发生这种情况。
所以基本上我就是这样做的:
- 启动板
- 在界外(或其他玩家)启动玩家
- 启动正确的玩家位置。
- 发生错误。
但是,如果我正确添加玩家(即第 3 步不会发生),则不会出现错误。
def add_player(board):
try:
choice = input("Please enter the current player's initial position.\nRemember to keep inside board's limits!\n>>> ").split()
if len(choice) == 3 and validate_player(choice[0], choice[1], choice[2]): # Check the length of supplied input and check type-integrity
return Player(int(choice[0]), int(choice[1]), choice[2], board) # Initiate a player with the supplied input. Each player is assigned to a Board (many-to-one relation).
except Exception as err:
print(err)
add_player(board)
【问题讨论】:
-
如果没有看到调用
forward的代码,我们将无法诊断问题。请提供minimal reproducible example。 -
这并不能直接回答您的问题,但Asking the user for input until they give a valid response 可能会为您提供有关如何在不使用递归的情况下验证用户输入的想法,这可能会使您的堆栈跟踪更易于理解。