一直对try…except有畏惧,并且懒得写,只想自己调试。后来觉得还是应该写,defensive的编程方式。cs50上这个例子特别合适,记下来:
- 用while True自动循环,输入错误就再循环,正确就退出。
- 在try except else语句中,只写有可能出错的语句,越少行数越好。print这种不会出错的句子不要写在一起。
while True:
try:
x = int(input("What's x? "))
except ValueError:
print("x is not an integer")
else:
break
print(f"x is {x}")
1. 分拆函数的写法
def main():
x = get_int()
print(f"x is {x}")
def get_int():
while True:
try:
x = int(input("What's x? "))
except ValueError:
print("x is not an integer")
else:
# return x
break
return x
main()
2. 分拆函数的更紧凑写法
利用return特性,return不仅仅返回数值,也能跳出循环,有break的作用
def main():
x = get_int()
print(f"x is {x}")
def get_int():
while True:
try:
x = int(input("What's x? "))
except ValueError:
print("x is not an integer")
else:
return x
main()
3. 更更紧凑写法
如果int(input("What's x? "))
没有语法错误,则直接返回;有语法错误,就跳到except。跟写法2都行,但是我觉得写法2更加容易阅读。
def main():
x = get_int()
print(f"x is {x}")
def get_int():
while True:
try:
return int(input("What's x? "))
except ValueError:
print("x is not an integer")
main()