1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        17個(gè) Python 高手都寫(xiě)不出來(lái)的幾個(gè)錯(cuò)誤

        共 5066字,需瀏覽 11分鐘

         ·

        2022-07-06 08:10


        來(lái)源:開(kāi)源中國(guó)   

        鏈接:https://www.oschina.net/question/89964_62779


        對(duì)于剛?cè)腴T(mén)的 Pythonista 在學(xué)習(xí)過(guò)程中運(yùn)行代碼是或多或少會(huì)遇到一些錯(cuò)誤,剛開(kāi)始可能看起來(lái)比較費(fèi)勁。隨著代碼量的積累,熟能生巧當(dāng)遇到一些運(yùn)行時(shí)錯(cuò)誤時(shí)能夠很快的定位問(wèn)題原題。下面整理了一些常見(jiàn)的 17 個(gè)錯(cuò)誤,等你寫(xiě)出的代碼不怎么出現(xiàn)這些錯(cuò)誤的時(shí)候,你的 Python 功力就上一個(gè)臺(tái)階了。換一句話說(shuō),當(dāng)你成為一名合格的 Python 開(kāi)發(fā)者后,你可能 “都寫(xiě)不出” 這類(lèi)的錯(cuò)誤。


        1

        忘記在 if,for,def,elif,else,class 等聲明末尾加 :


        會(huì)導(dǎo)致“SyntaxError :invalid syntax”如下:


        if spam == 42
          print('Hello!')


        2


        使用 = 而不是 ==


        也會(huì)導(dǎo)致“SyntaxError: invalid syntax”

        = 是賦值操作符而 == 是等于比較操作。該錯(cuò)誤發(fā)生在如下代碼中:


        if spam = 42:
          print('Hello!')


        3


        錯(cuò)誤的使用縮進(jìn)量


        導(dǎo)致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”以及“IndentationError:expected an indented block”


        記住縮進(jìn)增加只用在以:結(jié)束的語(yǔ)句之后,而之后必須恢復(fù)到之前的縮進(jìn)格式。該錯(cuò)誤發(fā)生在如下代碼中:


        print('Hello!')
          print('Howdy!')


        或者:


        if spam == 42:
          print('Hello!')
        print('Howdy!')


        4

        在 for 循環(huán)語(yǔ)句中忘記調(diào)用 len()


        導(dǎo)致“TypeError: 'list' object cannot be interpreted as an integer”

        通常你想要通過(guò)索引來(lái)迭代一個(gè)list或者string的元素,這需要調(diào)用 range() 函數(shù)。要記得返回len 值而不是返回這個(gè)列表。

        該錯(cuò)誤發(fā)生在如下代碼中:


        spam = ['cat''dog''mouse']
        for i in range(spam):
          print(spam[i])



        5

        嘗試修改 string 的值


        導(dǎo)致“TypeError: 'str' object does not support item assignment”

        string是一種不可變的數(shù)據(jù)類(lèi)型,該錯(cuò)誤發(fā)生在如下代碼中:


        spam = 'I have a pet cat.'
        spam[13] = 'r'
        print(spam)


        而正確做法是:


        spam = 'I have a pet cat.'
        spam = spam[:13] + 'r' + spam[14:]
        print(spam)


        6

        嘗試連接非字符串值與字符串


        導(dǎo)致 “TypeError: Can't convert 'int' object to str implicitly

        該錯(cuò)誤發(fā)生在如下代碼中:


        numEggs = 12
        print('I have ' + numEggs + ' eggs.')


        而正確做法是:


        numEggs = 12
        print('I have ' + str(numEggs) + ' eggs.')

        numEggs = 12
        print('I have %s eggs.' % (numEggs))


        7

        在字符串首尾忘記加引號(hào)


        導(dǎo)致“SyntaxError: EOL while scanning string literal

        該錯(cuò)誤發(fā)生在如下代碼中:


        print(Hello!')

        print('
        Hello!)

        myName = 'Al'
        print('My name is ' + myName + . How are you?')


        8


        變量或者函數(shù)名拼寫(xiě)錯(cuò)誤


        導(dǎo)致“NameError: name 'fooba' is not defined

        該錯(cuò)誤發(fā)生在如下代碼中:


        foobar = 'Al'
        print('My name is ' + fooba)

        spam = ruond(4.2)

        spam = Round(4.2)


        9

        方法名拼寫(xiě)錯(cuò)誤


        導(dǎo)致 “AttributeError: 'str' object has no attribute 'lowerr'

        該錯(cuò)誤發(fā)生在如下代碼中:


        spam = 'THIS IS IN LOWERCASE.'
        spam = spam.lowerr()


        10


        引用超過(guò) list 最大索引


        導(dǎo)致“IndexError: list index out of range

        該錯(cuò)誤發(fā)生在如下代碼中:


        spam = ['cat''dog''mouse']
        print(spam[6])


        11

        使用不存在的字典鍵值


        導(dǎo)致“KeyError:‘spam’”

        該錯(cuò)誤發(fā)生在如下代碼中:


        spam = {'cat''Zophie''dog''Basil''mouse''Whiskers'}
        print('The name of my pet zebra is ' + spam['zebra'])


        12

        嘗試使用 Python 關(guān)鍵字作為變量名


        導(dǎo)致“SyntaxError:invalid syntax

        Python關(guān)鍵不能用作變量名,該錯(cuò)誤發(fā)生在如下代碼中:


        class = 'algebra'


        Python3的關(guān)鍵字有:and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield


        13


        在一個(gè)定義新變量中使用增值操作符


        導(dǎo)致“NameError: name 'foobar' is not defined

        不要在聲明變量時(shí)使用0或者空字符串作為初始值,這樣使用自增操作符的一句spam += 1等于spam = spam + 1,這意味著spam需要指定一個(gè)有效的初始值。

        該錯(cuò)誤發(fā)生在如下代碼中:


        spam = 0
        spam += 42
        eggs += 42


        14

        在定義局部變量前在函數(shù)中使用局部變量(此時(shí)有與局部變量同名的全局變量存在)


        導(dǎo)致“UnboundLocalError: local variable 'foobar' referenced before assignment”

        在函數(shù)中使用局部變來(lái)那個(gè)而同時(shí)又存在同名全局變量時(shí)是很復(fù)雜的,使用規(guī)則是:如果在函數(shù)中定義了任何東西,如果它只是在函數(shù)中使用那它就是局部的,反之就是全局變量。

        這意味著你不能在定義它之前把它當(dāng)全局變量在函數(shù)中使用。

        該錯(cuò)誤發(fā)生在如下代碼中:


        someVar = 42
        def myFunction():
          print(someVar)
          someVar = 100
        myFunction()


        15


        嘗試使用 range() 創(chuàng)建整數(shù)列表

        導(dǎo)致“TypeError: 'range' object does not support item assignment

        有時(shí)你想要得到一個(gè)有序的整數(shù)列表,所以 range() 看上去是生成此列表的不錯(cuò)方式。然而,你需要記住 range() 返回的是 “range object”,而不是實(shí)際的 list 值。

        該錯(cuò)誤發(fā)生在如下代碼中:


        spam = range(10)
        spam[4] = -1

        正確寫(xiě)法:


        spam = list(range(10))
        spam[4] = -1


        (注意:在 Python 2 中 spam = range(10) 是能行的,因?yàn)樵?Python 2 中 range() 返回的是list值,但是在 Python 3 中就會(huì)產(chǎn)生以上錯(cuò)誤)


        16

        不存在 ++ 或者 -- 自增自減操作符。


        導(dǎo)致“SyntaxError: invalid syntax

        如果你習(xí)慣于例如 C++ , Java , PHP 等其他的語(yǔ)言,也許你會(huì)想要嘗試使用 ++ 或者 -- 自增自減一個(gè)變量。在Python中是沒(méi)有這樣的操作符的。

        該錯(cuò)誤發(fā)生在如下代碼中:


        spam = 1
        spam++


        正確寫(xiě)法:


        spam = 1
        spam += 1


        17

        忘記為方法的第一個(gè)參數(shù)添加 self 參數(shù)

        導(dǎo)致“TypeError: myMethod() takes no arguments (1 given)

        該錯(cuò)誤發(fā)生在如下代碼中:


        class Foo():
          def myMethod():
              print('Hello!')
        a = Foo()
        a.myMethod()

        看完了之后,相信你如果每天都在擼 Python 的話,上面的錯(cuò)誤幾乎都很少犯了。

        最后說(shuō)說(shuō)你有哪些還會(huì)常犯的錯(cuò)誤呢?




        推薦閱讀:

        入門(mén): 最全的零基礎(chǔ)學(xué)Python的問(wèn)題  | 零基礎(chǔ)學(xué)了8個(gè)月的Python  | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑


        干貨:爬取豆瓣短評(píng),電影《后來(lái)的我們》 | 38年NBA最佳球員分析 |   從萬(wàn)眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


        趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!


        AI: 會(huì)做詩(shī)的機(jī)器人 | 給圖片上色 | 預(yù)測(cè)收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


        小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水??! | 一鍵把html網(wǎng)頁(yè)保存為pdf!|  再見(jiàn)PDF提取收費(fèi)! | 用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r(jià)機(jī)票提示器! |60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!




        年度爆款文案

        點(diǎn)閱讀原文,看B站我的20個(gè)視頻!

        瀏覽 26
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产中文自拍 | 午夜精品一区二区三区在线播放 | 周妍希裸体 | 修修视频网站网页在线观看免费 | 爱爱视频网址 | 国产美女精品精品喷水免费观看 | 青青草久九在线观看久久国区一线 | 爱爱电影w无码 | 免费看污污的网站 | 超碰人人操天天操 |