對(duì)新手來說,一句 Hello World 能有多少坑?
大家好,歡迎來到 Crossin的編程教室 !
在編程屆,有一個(gè)不成文的習(xí)慣:在教授/學(xué)習(xí)一門新語言時(shí),會(huì)以輸出“Hello World”作為第一個(gè)代碼實(shí)例。
因此,相信很多同學(xué)的第一行 Python 代碼都是:
不過別小看這一行代碼,據(jù)我所知,有不少人都不是一次就運(yùn)行成功的,嚴(yán)重的甚至卡殼到必須求助外援才最終搞定。
正確的程序千篇一律,而出錯(cuò)的代碼卻各有各的bug,以下列舉一些可能踩到的坑:
1. 沒加引號(hào)
報(bào)錯(cuò):
SyntaxError: invalid syntax
字符串沒有加引號(hào),就會(huì)被當(dāng)做變量名來處理,這里相當(dāng)于在括號(hào)中寫了兩個(gè)變量名,既沒有定義,也不符合語法。
2.?用了中文標(biāo)點(diǎn)
或者
報(bào)錯(cuò):
SyntaxError: invalid character in identifier
Python中的所有符號(hào)都必須是英文半角符號(hào)。
3. 引號(hào)/括號(hào)未關(guān)閉
或者
報(bào)錯(cuò):
SyntaxError: EOL while scanning string literal
引號(hào)、括號(hào)都必須成對(duì)出現(xiàn)。這種bug發(fā)生時(shí),報(bào)錯(cuò)信息常會(huì)報(bào)在出錯(cuò)代碼的下一行,增加了調(diào)試的難度。
4. 引號(hào)不匹配
報(bào)錯(cuò):
SyntaxError: EOL while scanning string literal
雖然在Python中單引號(hào)、雙引號(hào)都可以表示字符串,但不可混用。否則等同于沒有關(guān)閉引號(hào)。
5. 大小寫混淆
報(bào)錯(cuò):
NameError: name 'Print' is not defined
Python是大小寫敏感的語言,語法關(guān)鍵字、變量名、函數(shù)名、類名、模塊名等等都需要嚴(yán)格按照定義時(shí)的大小寫輸入。
6. 縮進(jìn)錯(cuò)誤
報(bào)錯(cuò):
IndentationError: unexpected indent
“縮進(jìn)”在Python中決定著代碼的運(yùn)行邏輯,所以不可以隨便在行首增加空格。
7. 版本錯(cuò)誤
報(bào)錯(cuò):
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello World")?
這行代碼在 Python2 里是可以正常運(yùn)行的,但到了 Python3 里,print是一個(gè)函數(shù),必須加上括號(hào)來調(diào)用。此時(shí)你應(yīng)該檢查一下正在學(xué)習(xí)的教程,是否已經(jīng)過時(shí)了。
你在寫「Hello World」的時(shí)候還遇到過什么奇葩的bug?歡迎來留言討論~
