Python:有没有方法在try块中保存值并传递给except块?
我想实现以下功能:
我有一个全局变量x,在try块中通过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()
2 个回答
1
因为出现了错误,所以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
4
这个错误发生在把 input()
返回的值转换成整数的时候,也就是 int()
在出问题。所以 x
其实没有被赋值,因为是 int()
报错了。
你可以试着分两步来做,先获取一个值,然后再进行转换。这样的话,如果 int()
报错了,你可以捕捉到 ValueException
,而且你还可以保存用户输入的值,以便后续显示。
(正如 @chepner 提到的,input()
应该放在那个 try 块之外,因为它不会引发 ValueError
。)
x = input("Enter an integer: ")
try:
y = int(x)
except ValueError:
print(f"{x} is invalid. Expecting an integer")