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>

        Python 常見的17個錯誤分析

        共 3625字,需瀏覽 8分鐘

         ·

        2020-03-20 23:21


        d7302f5952c71cfdf4b40d5d9a130d6e.webp

        來源:開源中國? ?

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


        對于剛?cè)腴T的Pythoner在學習過程中運行代碼是或多或少會遇到一些錯誤,剛開始可能看起來比較費勁。隨著代碼量的積累,熟能生巧當遇到一些運行時錯誤時能夠很快的定位問題原題。下面整理了常見的17個錯誤,希望能夠幫助到大家


        1、

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

        會導致SyntaxError :invalid syntax”如下:

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


        2、

        使用= 而不是 ==

        也會導致“SyntaxError: invalid syntax

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

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


        3、

        錯誤的使用縮進量

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

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

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


        或者:

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


        4、

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

        導致“TypeError: 'list' object cannot be interpreted as an integer

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

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

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



        5、

        嘗試修改string的值

        導致“TypeError: 'str' object does not support item assignment

        string是一種不可變的數(shù)據(jù)類型,該錯誤發(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、

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

        導致 “TypeError: Can't convert 'int' object to str implicitly

        該錯誤發(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、

        在字符串首尾忘記加引號

        導致“SyntaxError: EOL while scanning string literal

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

        print(Hello!')

        print('
        Hello!)

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


        8、

        變量或者函數(shù)名拼寫錯誤

        導致“NameError: name 'fooba' is not defined

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

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

        spam = ruond(4.2)

        spam = Round(4.2)


        9、

        方法名拼寫錯誤

        導致 “AttributeError: 'str' object has no attribute 'lowerr'

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

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


        10、

        引用超過list最大索引

        導致“IndexError: list index out of range

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

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


        11、

        使用不存在的字典鍵值

        導致“KeyError:‘spam’”

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

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


        12、

        嘗試使用Python關鍵字作為變量名

        導致“SyntaxError:invalid syntax

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

        class = 'algebra'


        Python3的關鍵字有: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、

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

        導致“NameError: name 'foobar' is not defined

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

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

        spam = 0
        spam += 42
        eggs += 42


        14、

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

        導致“UnboundLocalError: local variable 'foobar' referenced before assignment

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

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

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

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


        15、


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

        導致“TypeError: 'range' object does not support item assignment

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

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

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

        正確寫法:

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

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


        16、

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

        導致“SyntaxError: invalid syntax

        如果你習慣于例如 C++ , Java , PHP 等其他的語言,也許你會想要嘗試使用 ++ 或者 -- 自增自減一個變量。在Python中是沒有這樣的操作符的。

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

        spam = 1
        spam++

        正確寫法:

        spam = 1
        spam += 1


        17、

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

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

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

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


        好文章,我在看??

        瀏覽 59
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        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>
            久久精品视频免费观看 | 丁香婷婷五月激情深爱综合 | 国产丝袜人妻一区二区三区电影 | 香蕉视频草草 | 肉大棒一进一出免费视频 | 性毛片 | 日日操天天操 | 天天插天天色 | 欧美三级韩国三级日本三斤在线观看 | 99999国产精品 |