python name not defined 变量里有这列_Python小白历险记(1)关于碰到的NameError: name 'xxx' is not defined 错的折腾...

在web前端,张小白的学习中,已经遇到了vscode的编码害死人的问题了。没想到在学习《AI全栈成长计划-AI基础篇》的Python语言时,又来了一次。下面把经过跟大家汇报一下。

话说教程中1.3节《基本语句》的讲解中有一个基本break和continue的语句:

d57d628be1ff4dff824893cfefd5e60a.png

张小白原来没想到会有什么难度,就简单地在Vscode的python命令行界面进行尝试:

4c9a5e16d4a64b8ad6623a08dea3fd59.png

哪里知道,敲命令行也会老犯低级错误,比如False写成false, else后面忘记加冒号等等。张小白想想似乎不大好,干脆在Vscode写个py文件好了。于是入坑。。。

一开始的写法是这样的:

6b4bb5c4942bc1fe080c079c24b7fe42.png

报了个 NameError: name 'ZhangHui' is not defined 错。

感觉可能是input语句写错了,查了下资料,input貌似写成单引号或者双引号都是对的。

不死心的张小白又用了单引号试了下,也是一样的错。

userlist = ['Zhanghui','Huawei','IoT']

bvalid = False

count = 3

while count > 0:

userInput = input('Enter your name here:')

print(userInput)

for user in userlist:

if user == userInput:

bvalid = True

break

if not bvalid:

print('You name does not exist in my system.Try again!')

count -=1

continue

else:

print('Welcome,',userInput)

break

else:

print('You have tried 3 times!')

原文看起来好像也没啥问题。。

甚至,张小白把其他语句都去掉了,留下了光秃秃的input。。。

6b91c3a895080cf12392f692009fc8e4.png

还是老样子。。

甚至去掉提示符:

3af91914dd68fcfb86ad2f7dbf637b3a.png

真是顽固的python。。。

我把问题发到群里,大虾们纷纷帮我出主意。。。

有位大大说,可能是空格不是半角空格的问题,for user in userList这样的里面的空格不是半角空格

另一位大大说:

540c0c11de1be1daddd9ed8c2290979d.png

8790257a38515095ffc7648d42cb688e.png

看来果然是跟Web前端编码类似的问题,先用pycharm试一下吧:

在pycharm新建个工程,将代码拷贝过来:

d6bd4b6928f6318af82660e172c247ea.png

果然发现,有四个粉红色的地方,应该是空格有问题。。不知道是不是又变成了“不间断空格”。待会儿再试。。。

先将这些错误改正:

474b74fda7895eec0104194463c2fa61.png

果然,可以正常出结果了。(当然了,读者可能还没发现,其实这个执行的逻辑是不对的。这个稍后再说。。。)

我们再用pycharm中运行错误的代码,拷贝回vscode。

再运行:

userlist=['Zhanghui','Huawei','IoT']

bvalid=False

count=3

while count>0:

userInput=input('Enter your name here:')

print(userInput)

for user in userlist:

if user == userInput:

bvalid=True

break

if not bvalid:

print('You name does not exist in my system.Try again!')

count-=1

continue

else:

print('Welcome,',userInput)

break

else:

print('You have tried 3 times!')

唉,又报了另一个错:SyntaxError: Non-ASCII character '\xc2' in file continue.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

e14964a1e2291b6c1404cf7436707c81.png

看来还是非法字符的问题,张小白查了下资料,将 最前面加了个注释:# -*- coding:UTF-8 -*-

2427731ed5cf85102b6a9c36353841b5.png

终于vscode 告诉我,这里空格有问题。好像是个中文乱码。。。有点像繁体字的“听”。。。

50d9bced7e1704053c3e99f92fa0fc3e.png

果然又是C2 A0的不间断空格的坑。。。

一个一个地去排坑,原来引号内的也是有问题的。。。

e31542172d7392b2a409976c2e59dec5.png

依次删除各类空格。。。继续运行。。。

45bb8f5c23d9d269badf4cd6b6f6d6b6.png

结果还是有NameError: name 'xxx' is not defined的错。去掉了不间断空格的问题,在 Vscode上,问题又跑了回来。难道 张小白,你不是忘了初心,而是忘了出发?(王建国的话在张小白耳边嗡嗡作响。。。)

笔者有点奇怪,为啥PyCharm可以,但是VScode不行。除了vscode的不可见空格之外,还有什么在难为张小白呢?

5422f7d82bdc4dee4c18ade14c7b6049.png

7655ea53afd7a717c0346fb2dd9e863d.png

咦?怎么vscode用的python是2.7? Pycharm用的版本是3.7?

原来是vscode读环境变量惹的祸。张小白的电脑上同时装了2个版本的python,但是vscode指向了2.7.。难道2.7没有某些特性吗?

去将环境变量中两个python2.7的path删除:

ccf884f9a68afed123030320ae7fb0c8.png

留下miniconda3的python3.7。。。

重新打开vscode终端,检查下python的版本:终于是3.7了。。。

1ef405751e5ccaf1e14669349fd8a801.png

然后再跑一下:

6e81e4f44f51a080598ea15e87bed895.png

终于可以跑出来结果了。

原来python2可能不支持input或者其他别的语句吧。。。这个以后再研究。。。

张小白觉得这个流程很不爽,输入一次,弹出3个错误。。完全应该是输入三次,三次都失败则没了,否则应该重新输入而已。。。

改BUG:

006b2d84ae1ee87653d382d871998e4a.png

显然原来上面两个判断的位置不对,应该前移一个缩进。。。否则就是放在for循环里面进行判断了。。。

64d5b75c253c7e336dea3ccce9bc9fa1.png

看来python虽然写起来很简单,但是它完全依靠缩进和冒号来进行代码的分布。。。貌似少了很多像C语言或者Java语言的括号,导致匹配很容易出现问题。。。

这样的话,写python语句真的要非常小心了。。python貌似没那么AI。。(它居然还老是用在AI上。。。)

(全文完,谢谢阅读,另外感谢群里各位大大的帮助: @0o0 @行羽 @云水不言 @ROC @笨笨 @city hunter )

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值