Python学习-一些让人头疼的小bug(新手升级的日常)
1.卡在一些看起来不会出错的地方,系统也没有报错。
来看一下这个程序:
这个程序的目的是想让用户输入数字,如果输入不是数字,那么就返回,要求用户重新输入。
while True:
t = input('plz enter a number:')
try:
t == int(t)
t = int(t)
print('You are clever! Your number is ' + t)
break
except:
print('You are wrong, man')
continue
运行的话,你会发现,的确可以筛选出非数字的情况,系统完全没有报错。但是结果是这样的:
plz enter a number:what
You are wrong, man
plz enter a number:hello
You are wrong, man
plz enter a number:g
You are wrong, man
plz enter a number:10
You are wrong, man
plz enter a number:5
You are wrong, man
咋回事呢?原因也很简单,因为你在程序里,重新定义了 t 变量的类型为整数(int),一般为了接下来的计算都会这么做。但是!定义之后,print函数里,没有加上str(t),导致print函数无法执行,接下来的break也被跳过了,因为本身的函数在try循环中,而try循环会跳过所有报错。而如果单独运行这段print,你会得到:
t = 6
print('You are clever! Your number is ' + t)
结果:
Traceback (most recent call last):
File "C:\Users\lenovo\Desktop\py\11.py", line 2, in <module>
print('You are clever! Your number is ' + t)
TypeError: can only concatenate str (not "int") to str
正常报错,所以在使用try函数时,一定要多测试一下。
2.循环的问题
看看这一段:
order = 1
while order:
while True:
t = input('plz enter a number:')
try:
t == int(t)
t = int(t)
print('You are clever! Your number is ' + str(t))
break
except:
print('You are wrong, man')
continue
order = int(input('plz enter 1 to reload, 2 to quit.'))
if order == 1:
continue
else:
break
break
我们给代码加了一段循环,可以让用户选择是否重新输入数字。这一段看起来没什么问题,甚至运行起来也没什么问题。运行结果如下:
plz enter a number:8
You are clever! Your number is 8
plz enter 1 to reload, 2 to quit.1
plz enter a number:7
You are clever! Your number is 7
plz enter 1 to reload, 2 to quit.2
但是其实,这里面多了一个结束循环的 break :
if order == 1:
continue
else:
break
break #这个break 是多余的
虽然感觉好像是两个循环,但是continue和break都含有,先结束本层循环,然后至上层循环,continue就是跳到上层开头,break就是直接到上层结束。因为如果只有一层意思,那么continue之后也需要加入一个break了,但是这样的话:
if order == 1:
continue
break #新添加的break
else:
break
break
无情报错:

这个也是我在学习Python过程中遇到的一个小问题,希望大家都能避免。
希望大家都能事事顺意,本篇是个人学习总结,仅供记录参考。