天天看点

Python学习-一些让人头疼的小bug(新手升级的日常)

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学习-一些让人头疼的小bug(新手升级的日常)

这个也是我在学习Python过程中遇到的一个小问题,希望大家都能避免。

希望大家都能事事顺意,本篇是个人学习总结,仅供记录参考。