--- title: Python 新手導覽( error 篇 ) tags: Python, note, guiding --- [TOC] # 程式出錯怎麼辦 程式出錯有兩種,一種是會導致程式==無法執行==的錯誤;另一種是程式可以正常執行,但執行==結果不如預期==的錯誤。 通常遇到第一種錯誤我們都會很開心,因為它會提示你哪裡出錯了,以及錯誤原因; 第二種錯誤就該頭痛了,因為只能自己想辦法偵錯。 ## 導致程式無法執行的錯誤 初學者通常會因為語法的不熟悉,所以花費大量時間在與這種錯誤打交道,熟悉之後處理起來就會快速許多 ### 首先最重要的是能看出錯在哪 ![](https://i.imgur.com/7w1D5VE.png =150x) ![](https://i.imgur.com/g2kV42B.png =200x) > module $exec_66 ==line 5== **( 錯在第五行** > if 10 =+ 3: **( 錯在 if 10 =+ 3: 這句** > ^ SyntaxError: ==invalid syntax== **( 錯誤類型** ### 1. SyntaxError > 1. 打錯關鍵字(if/ for/ ...) > 2. 誤用運算子(+ - * /...) > 3. 忘了加冒號 > 4. 判別式的 == 少一個等號 > 5. 輸出字串 卻忘了加引號 `print(hello world)` > 他會將 hello world 解讀為兩個變數(因為沒有加引號變成字串) > 所以因為在 print() 函式中連續出現兩個變數是不合理的架構 而出錯 > 6. 括弧不成對 print(input() 總之 就是使程式的**架構**出了問題 -> 出現了不認識的運算子 =+ -> 原本應該要有冒號的地方卻沒有冒號 等 ### 2. EOFError > 多打/少打了 input() snakify 只有給你三個輸入,我寫程式卻要五個輸入 他等半天等不到最後兩個輸入當然會出錯! ==在迴圈中,仔細檢查執行幾次 input() 也是防錯關鍵== ==仔細確認輸入兩個數的方式也是關鍵== 當輸入為 123 456 橫著擺的時候 ```python! a = input() # a 會得到 '123 456' b = input() # 所以 b 會一直等不到輸入 print(a + b) ``` ### 3. IndentationError > Python 獨有的錯誤: 縮行錯誤 為了保持程式的整齊 python 要求在 if for 等結構後方加上縮排 該縮的地方不縮 不該縮的地方亂縮 就會出錯 ### 4. TypeError > 型態錯誤 當我做了那個型態所不允許的操作就會出錯 簡單來說像是: `'a'+1` 字串與數字不能相加 所以就會出錯 ### 5. ValueError > 輸入不符合規則的資料 比如 `int('hello')` 這邊我想將字串 `"hello"` 轉為數字顯然是不行的 因為 `int()` 接收的必須是可以轉為數字的資料像是 `"123"` `int('123 456')` 也沒辦法,`int()` 一次只能處理一個數字 ### 6. NameError > 使用到尚未定義的變數名稱 ```python! print(hello) hello = 2 ``` 這邊的 hello 是變數(非字串) 所以他會往**上**找有沒有定義 hello 變數,結果找不到 hello 變數 所以出錯了 ### 7. IndexError > 對列表(List) 使用超出範圍的 索引(index) ```python! a = [] a = a + a[0] # a[0] 應該是多少? ``` ```python! scores = [int(e) for e in input().split()] print('Last one:', scores[len(scores)]) # scores[len(scores)] 超出範圍了,對嗎? ``` ### 8. KeyError > 對字典檔(Dict) 使用未定義的 key ```python! vote = {} vote['personA'] = vote['personA'] + price # vote['personA'] + price 應該是多少? ``` ### 9. 其他 其他的錯誤也可以試著到網路上查查看解法 直接將錯誤訊息貼過去就行了(當然稍微篩選適合的部分會更好) 畢竟在資訊方面的學習資料 網路資源可以說是課本的幾百幾千倍以上 ## 結果不如預期的錯誤 > 這邊就只能靠自己努力了 > 除了仔細閱讀程式中的邏輯錯誤外 > 可以利用一些小技巧幫助自己判斷 > 利用`print('a=', a)` 觀察 `a` 變數當前的數值 以此來發現不合理的地方 > [color=blue]