Python 输入语句是';t在调试过程中求值-触发尝试,但

Python 输入语句是';t在调试过程中求值-触发尝试,但,python,python-3.x,visual-studio-code,Python,Python 3.x,Visual Studio Code,我正在尝试用Python编写一个基本的tic-tac-toe。我的一个功能是获取用户输入的1到9之间的数字。如果用户输入一个非整数或一个不在1和9之间的数字,它将返回一个错误。它只是一种尝试,只是为了避免担心类型转换 def get_move(): print("Your move ...") while True: try: move = input("Type a number from 1-9: &qu

我正在尝试用Python编写一个基本的tic-tac-toe。我的一个功能是获取用户输入的1到9之间的数字。如果用户输入一个非整数或一个不在1和9之间的数字,它将返回一个错误。它只是一种尝试,只是为了避免担心类型转换

def get_move():
    print("Your move ...")

    while True:
        try:
            move = input("Type a number from 1-9: ")
            if move.isnumeric():
                if (0 < int(move) < 10):
                    break
                else:
                    print("The number is outside the range. Try again.")
            else:
                if (move.tolower == "quit") or (move.tolower == "exit"):
                    exit()
        except:
            print("Not a valid integer, try again.")

    return move
致:

并将
except
子句更改为
except(ValueError,TypeError)
。现在我收到以下错误:

Exception has occurred: EOFError
EOF when reading a line
  File "[...]tictacpy.py", line 18, in get_move
    move = input("Type a number from 1-9: ")
  File "[...]tictacpy.py", line 46, in <module>
    move = get_move()
发生异常:EOFError 读一行时的EOF 文件“[…]tictacpy.py”,第18行,在get_move中 移动=输入(“键入1-9之间的数字:”) 文件“[…]tictacpy.py”,第46行,在 move=get_move()
最有可能发生这种情况,因为在调试器中,您没有用于标准输入的控制台,因此调用
input()
将出错(我不知道具体的VS代码,所以我在这里猜测,但这是一个合理的原因)

在任何情况下,我强烈建议不要使用除子句以外的所有捕获
,因为这会使可能发生的错误保持沉默,并错误地处理这些错误,而这些错误并不是预期流程的一部分

首先,我将您的
except
改为
except(ValueError,TypeError)
,以便它只捕获由错误输入/类型转换问题导致的错误。然后,您将能够看到真正的错误是什么


另外,请注意,没有“move.tolower”这样的东西-您可能指的是
move.lower()
。也许这就是你的错误?

捕获所有例外是个坏主意,尤其是如果它们只是丢弃了实际错误。您如何知道异常是由输入的无效整数引起的?您应该捕获特定的错误,而除
之外的一般捕获所有
应该可以为您提供一些实际潜在错误的指示。此问题是由
降低
(不是有效的
str
属性或方法)-如果move.lower()=“退出”或move.lower()=“退出”,则将其设置为
对于“不可复制或由打字错误引起”的接近投票,我已经纠正了打字错误,但问题仍然没有解决。此外,我非常感谢反对者也能澄清问题需要改进的地方。如果您不告诉我问题出了什么问题,我该如何提高问题质量?请看一下此搜索中的问题:谢谢,我在
tolower
中使用了Visual Basic的语法。尽管如此,我仍然收到一个错误-我已经按照您的建议更改了Except子句,现在调试器返回
异常:读取get\u move move=input中第18行的行文件“…tictacpy.py”(“从1-9键入一个数字:”)文件“…tictacpy.py”,第46行的move=get\u move()
Yep,非常确定这意味着stdin已在调试器中结束/关闭。了解如何获取vscode以允许您键入标准输入。
if move.lower() == "quit" or move.lower() == "exit":
    exit()
Exception has occurred: EOFError
EOF when reading a line
  File "[...]tictacpy.py", line 18, in get_move
    move = input("Type a number from 1-9: ")
  File "[...]tictacpy.py", line 46, in <module>
    move = get_move()