python中出現(xiàn)invalid syntax報(bào)錯(cuò)的幾種原因分析

  • A+
所屬分類:百科知識(shí)

這篇文章旨為剛接觸python不久的朋友,提供一點(diǎn)幫助,請(qǐng)?jiān)跈z查代碼沒(méi)有主要問(wèn)題時(shí)再看是否存在以下問(wèn)題。

一般來(lái)說(shuō),寫完代碼運(yùn)行時(shí),如果代碼中有錯(cuò)誤,解釋器會(huì)提示錯(cuò)誤信息,按照提示信息,一般很快可以找出錯(cuò)誤,進(jìn)行修改。但也有一些時(shí)候錯(cuò)誤提示的信息不是那么明確,代碼檢查了幾遍仍找不出問(wèn)題,就比較頭疼了。今天我們來(lái)說(shuō)一個(gè)常見(jiàn)的invalid syntax,在寫代碼的過(guò)程中,哪些小細(xì)節(jié)錯(cuò)誤容易導(dǎo)致invalid syntax報(bào)錯(cuò)。更多的原因,后續(xù)逐漸補(bǔ)充......

1.符號(hào)使用不正確

例如:只寫了半個(gè)括號(hào),使用了中文符號(hào)等

像下面的代碼中,76行少了一個(gè)右括號(hào)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
????……
????else:
????????header = "HTTP/1.1 200 OK\r\n"
????????header += "\r\n"
????????body = "hahahaha"
????????response = header + body
????????new_socket.send(response.encode("utf-8")
????new_socket.close()
def run_forever(self):
????while True:
????????new_socket, client_addr = self.tcp_server_socket.accept()
????????
????????p = multiprocessing.Process(target=self.service_client, args=(new_socket,))
????????p.start()
????????
????????new_socket.close()
????????……

運(yùn)行代碼,則會(huì)報(bào)錯(cuò):

?File "w01.py", line 78
new_socket.close()
^
SyntaxError: invalid syntax

其實(shí),78行并沒(méi)有錯(cuò)誤,這時(shí)我們就在78行附近尋找,看是否有成對(duì)的符號(hào)(如括號(hào))未成對(duì)使用的情況。在76行補(bǔ)全右括號(hào)后,代碼運(yùn)行正常。

有些解釋器會(huì)有自動(dòng)補(bǔ)全符號(hào)的功能。有些則沒(méi)有,這時(shí)對(duì)于新手朋友要特別注意,在寫成對(duì)的符號(hào)時(shí)(例如括號(hào)、引號(hào)等)一定要一次把一對(duì)符號(hào)寫完,再在符號(hào)中填寫內(nèi)容,避免因這種情況出現(xiàn)bug,后續(xù)檢查花費(fèi)大量時(shí)間。

2.代碼縮進(jìn)問(wèn)題

python是一種嚴(yán)格依賴縮進(jìn)的語(yǔ)言,如果縮進(jìn)不正確或縮進(jìn)格式不統(tǒng)一,一般錯(cuò)誤信息會(huì)明確告訴你,但有時(shí)也會(huì)出現(xiàn)invalid syntax報(bào)錯(cuò)。

所謂縮進(jìn)不正確,python的縮進(jìn)是四個(gè)空格或一個(gè)TAB,如果縮進(jìn)三個(gè)空格,一定報(bào)錯(cuò)

所謂縮進(jìn)格式,即不能空格和TAB混用。如果不清楚是否存在混用,可以使用sublime統(tǒng)一調(diào)整即可。

invalid syntax——無(wú)效語(yǔ)法

錯(cuò)誤代碼塊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
num_1=float(input(“請(qǐng)輸入第一個(gè)數(shù):”))
num_2=float(input(“請(qǐng)輸入第二個(gè)數(shù):”))
c=(input(“請(qǐng)選擇運(yùn)算類型:1.+ 2- 3.* 4./ 5.% :”))
if c==+
out=num_1 + num_2
if c==-:
out=num_1 - num_2
if c==*:
out=num_1 * num_2
if c==/:
out=num_1 / num_2
if c==%:
out=num_1 % num_2
print(“運(yùn)算結(jié)果是:”,out)`

出現(xiàn)錯(cuò)誤:invalid syntax

在此程序中,把“、+、-、、/等運(yùn)算符直接用在if條件中造成報(bào)錯(cuò),故字符串類型和數(shù)值類型*不一樣,應(yīng)用“+”、“-”符號(hào)作為判斷條件。

調(diào)整后代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
num_1=float(input(“請(qǐng)輸入第一個(gè)數(shù):”))
num_2=float(input(“請(qǐng)輸入第二個(gè)數(shù):”))
c=(input(“請(qǐng)選擇運(yùn)算類型:1.+ 2- 3.* 4./ 5.% :”))
if c=="+":
out=num_1 + num_2
if c=="-":
out=num_1 - num_2
if c=="*":
out=num_1 * num_2
if c=="/":
out=num_1 / num_2
if c=="%":
out=num_1 % num_2
print(“運(yùn)算結(jié)果是:”,out)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考

歷史上的今天:

推薦應(yīng)用

發(fā)表評(píng)論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: