我想完成以下任务:
我在 try 块中有一个全局变量 x 分配给 int(input('x: ')) ,但我想在 except 块中传递 x 的值,以提醒用户他/她输入的特定值无效。看起来 except 块甚至无法识别 x 的值。我什至尝试过使用全局变量 x,但这显然不起作用。例如,如果我输入一个无效值,例如“hello”,我想保存值“hello”并将其传递到 except 块以通知用户“hello”无效。期望一个整数。我得到的结果是 None 无效,因为我将全局变量 x 初始化为 None。
global x
x = None
def main():
global x
x = get_int()
print(f"x = {x}")
def get_int():
global x
while True:
try:
x = int(input("Enter an integer: "))
except ValueError:
print(f"{x} is invalid. Expecting an an integer")
# pass
else:
return x
if __name__ == "__main__":
main()
当
input()
返回的值被 int()
解析为整数时,会引发错误,因此 x
从未实际分配过值,因为是 int()
引发了异常。
尝试分两步进行,获取一个值,然后解析它,这样您就可以捕获由
ValueException
引发的 int()
,但您可以存储用户输入的值,以便可以将其显示回来。
try:
x = input("Enter an integer: ")
y = int(x)
except ValueError:
print(f"{x} is invalid. Expecting an integer")
x
未分配,但您可以捕获异常并显示错误消息,这实际上是相关的。另外,不需要全局变量:
def main():
x = get_int()
print(f'{x=}')
def get_int():
while True:
try:
return int(input('Enter an integer: '))
except ValueError as e:
print(f'Error: {e}')
if __name__ == '__main__':
main()
输出:
Enter an integer: hello
Error: invalid literal for int() with base 10: 'hello'
Enter an integer: 5
x=5