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è)常見(jiàn)的Python運(yùn)行時(shí)錯(cuò)誤,你中招了沒(méi)?

        共 4364字,需瀏覽 9分鐘

         ·

        2021-12-30 03:28

        作者:彭博   www.oschina.net/question/89964_62779

        ↑ 關(guān)注 + 星標(biāo) ,每天學(xué)Python新技能

        后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

        大家好,我是龍哥!

        對(duì)于剛?cè)腴T(mén)的Pythoner在學(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ò)誤,希望能夠幫助到大家。


        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ù)類型,該錯(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程序,并且想玩服務(wù)器編程的可以加入我們,我們一年會(huì)帶大家玩7個(gè)項(xiàng)目,大家可以修改我們的代碼來(lái)擴(kuò)展它的功能,比如監(jiān)控股票的可以改成監(jiān)控基金的,或者是多個(gè)金融數(shù)據(jù)產(chǎn)品,然后根據(jù)一些均線策略來(lái)提醒你的交易策略等等。


        推薦閱讀

        1. 微信和QQ,終于可以互通了!

        2. 3天,我把數(shù)據(jù)可視化的 Tableau、Excel 透視表擼干凈了!

        3. 2022年春晚小品提前泄露!

        4. 一個(gè)小破網(wǎng)站,居然比 Python 官網(wǎng)還牛逼

        5. 阿里瘋傳!Python+商業(yè)數(shù)據(jù)分析+數(shù)據(jù)可視化教程(建議收藏)



        瀏覽 30
        點(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>
            做爱视频在线观看网站免费观看 | 操BBXX | 免费做人爱高潮1000视频 | 欧美在线www | 欧美性爱三级片女老师野外 | 在线观看国产精品秘 入口 | 男女日皮视频 | 扒开双腿进入做爽爽视频 | 亚洲AV无码成人精品 | 无码性爱AV |