Truy nguyên (cuộc gọi gần đây nhất) python

Mọi lập trình viên đều gặp phải lỗi, cả những người mới bắt đầu và những người đã lập trình trong nhiều năm. Đôi khi gặp lỗi và ngoại lệ có thể rất khó chịu và có thể khiến việc viết mã giống như một nỗ lực vô vọng. Tuy nhiên, hiểu được các loại lỗi khác nhau là gì và khi nào bạn có thể gặp phải chúng có thể giúp ích rất nhiều. Khi bạn biết lý do tại sao bạn gặp phải một số loại lỗi nhất định, chúng sẽ trở nên dễ sửa hơn nhiều

mục tiêu

  • Để có thể đọc truy nguyên và xác định các mẩu thông tin liên quan sau đây
    • Tệp, chức năng và số dòng xảy ra lỗi
    • Loại lỗi
    • Thông báo lỗi
  • Để có thể mô tả các loại tình huống xảy ra các lỗi sau
    • ---------------------------------------------------------------------------
      KeyError                                  Traceback [most recent call last]
       in []
            1 from errors_02 import print_friday_message
      ----> 2 print_friday_message[]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
           13 
           14 def print_friday_message[]:
      ---> 15     print_message["Friday"]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
            9         "sunday": "Aw, the weekend is almost over."
           10     }
      ---> 11     print messages[day]
           12 
           13 
      
      KeyError: 'Friday'
      3 và
      ---------------------------------------------------------------------------
      KeyError                                  Traceback [most recent call last]
       in []
            1 from errors_02 import print_friday_message
      ----> 2 print_friday_message[]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
           13 
           14 def print_friday_message[]:
      ---> 15     print_message["Friday"]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
            9         "sunday": "Aw, the weekend is almost over."
           10     }
      ---> 11     print messages[day]
           12 
           13 
      
      KeyError: 'Friday'
      4
    • ---------------------------------------------------------------------------
      KeyError                                  Traceback [most recent call last]
       in []
            1 from errors_02 import print_friday_message
      ----> 2 print_friday_message[]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
           13 
           14 def print_friday_message[]:
      ---> 15     print_message["Friday"]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
            9         "sunday": "Aw, the weekend is almost over."
           10     }
      ---> 11     print messages[day]
           12 
           13 
      
      KeyError: 'Friday'
      5
    • ---------------------------------------------------------------------------
      KeyError                                  Traceback [most recent call last]
       in []
            1 from errors_02 import print_friday_message
      ----> 2 print_friday_message[]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
           13 
           14 def print_friday_message[]:
      ---> 15     print_message["Friday"]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
            9         "sunday": "Aw, the weekend is almost over."
           10     }
      ---> 11     print messages[day]
           12 
           13 
      
      KeyError: 'Friday'
      6 và
      ---------------------------------------------------------------------------
      KeyError                                  Traceback [most recent call last]
       in []
            1 from errors_02 import print_friday_message
      ----> 2 print_friday_message[]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
           13 
           14 def print_friday_message[]:
      ---> 15     print_message["Friday"]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
            9         "sunday": "Aw, the weekend is almost over."
           10     }
      ---> 11     print messages[day]
           12 
           13 
      
      KeyError: 'Friday'
      7
    • ---------------------------------------------------------------------------
      KeyError                                  Traceback [most recent call last]
       in []
            1 from errors_02 import print_friday_message
      ----> 2 print_friday_message[]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
           13 
           14 def print_friday_message[]:
      ---> 15     print_message["Friday"]
      
      /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
            9         "sunday": "Aw, the weekend is almost over."
           10     }
      ---> 11     print messages[day]
           12 
           13 
      
      KeyError: 'Friday'
      8

Giải phẫu của một lỗi

Lỗi trong Python có một dạng rất cụ thể, được gọi là dấu vết. Hãy kiểm tra một

from errors_01 import favorite_ice_cream
favorite_ice_cream[]

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range

Tracback cụ thể này có hai cấp độ. Bạn có thể xác định số cấp độ bằng cách tìm số mũi tên ở phía bên tay trái. Trong trường hợp này

  1. Đầu tiên hiển thị mã từ ô bên trên, với một mũi tên chỉ đến Dòng 2 [là
    ---------------------------------------------------------------------------
    KeyError                                  Traceback [most recent call last]
     in []
          1 from errors_02 import print_friday_message
    ----> 2 print_friday_message[]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
         13 
         14 def print_friday_message[]:
    ---> 15     print_message["Friday"]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
          9         "sunday": "Aw, the weekend is almost over."
         10     }
    ---> 11     print messages[day]
         12 
         13 
    
    KeyError: 'Friday'
    9]
  2. Dòng thứ hai hiển thị một số mã trong một chức năng khác [______90, nằm trong tệp
    def some_function[]
        msg = "hello, world!"
        print msg
         return msg
    1], với một mũi tên chỉ đến Dòng 7 [là
    def some_function[]
        msg = "hello, world!"
        print msg
         return msg
    2]

Cấp độ cuối cùng là nơi thực sự xảy ra lỗi. [Các] cấp độ khác cho biết chương trình đã thực hiện chức năng nào để xuống cấp độ tiếp theo. Vì vậy, trong trường hợp này, trước tiên chương trình thực hiện lệnh gọi hàm tới hàm

def some_function[]
    msg = "hello, world!"
    print msg
     return msg
0. Bên trong chức năng này, chương trình đã gặp lỗi ở Dòng 7, khi nó cố chạy mã
def some_function[]
    msg = "hello, world!"
    print msg
     return msg
2

Truy nguyên dài

Đôi khi, bạn có thể thấy một truy nguyên rất dài – đôi khi chúng thậm chí có thể sâu tới 20 cấp độ. Điều này có thể làm cho nó giống như một điều gì đó khủng khiếp đã xảy ra, nhưng thực sự nó chỉ có nghĩa là chương trình của bạn đã gọi nhiều chức năng trước khi gặp lỗi. Hầu hết thời gian, bạn chỉ có thể chú ý đến mức thấp nhất, đó là nơi thực sự xảy ra lỗi

Vậy thực sự chương trình đã gặp phải lỗi gì?

Nếu bạn gặp lỗi và không biết nó có nghĩa là gì, điều quan trọng vẫn là đọc kỹ phần truy nguyên. Bằng cách đó, nếu bạn sửa lỗi nhưng gặp một lỗi mới, bạn có thể biết rằng lỗi đã thay đổi. Ngoài ra, đôi khi chỉ cần biết lỗi xảy ra ở đâu là đủ để sửa lỗi, ngay cả khi bạn không hoàn toàn hiểu thông báo

Nếu bạn gặp lỗi mà bạn không nhận ra, hãy thử xem tài liệu chính thức về lỗi. Tuy nhiên, lưu ý rằng không phải lúc nào bạn cũng có thể tìm thấy lỗi ở đó, vì có thể tạo lỗi tùy chỉnh. Trong trường hợp đó, hy vọng thông báo lỗi tùy chỉnh đủ thông tin để giúp bạn tìm ra lỗi đã xảy ra

Thách đấu. đọc thông báo lỗi

Đọc truy nguyên bên dưới và xác định các mẩu thông tin sau về nó

  1. Tracback có bao nhiêu cấp độ?
  2. Tên tệp xảy ra lỗi là gì?
  3. Tên chức năng xảy ra lỗi là gì?
  4. Lỗi xảy ra ở dòng nào trong chức năng này?
  5. Loại lỗi là gì?
  6. Thông báo lỗi là gì?

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
5

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'

Lỗi cú pháp

Khi bạn quên dấu hai chấm ở cuối dòng, vô tình thêm quá nhiều khoảng trắng khi thụt lề dưới câu lệnh

def some_function[]
    msg = "hello, world!"
    print msg
     return msg
6 hoặc quên dấu ngoặc đơn, bạn sẽ gặp lỗi cú pháp. Điều này có nghĩa là Python không thể tìm ra cách đọc chương trình của bạn. Điều này tương tự như quên dấu câu trong tiếng Anh

văn bản này rất khó đọc không có dấu chấm câu cũng không có cách viết hoa tại sao lại khó như vậy bởi vì bạn phải tìm ra vị trí kết thúc của mỗi câu bạn cũng phải tìm ra vị trí bắt đầu của mỗi câu ở một mức độ nào đó có thể không rõ ràng nếu có

Mọi người thường có thể tìm ra ý nghĩa của văn bản mà không có dấu chấm câu, nhưng mọi người thông minh hơn nhiều so với máy tính. Nếu Python không biết cách đọc chương trình, nó sẽ bỏ cuộc và báo lỗi cho bạn. Ví dụ

def some_function[]
    msg = "hello, world!"
    print msg
     return msg

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
9

Ở đây, Python cho chúng ta biết rằng có một

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
3 trên dòng 1, và thậm chí còn đặt một mũi tên nhỏ ở nơi có vấn đề. Trong trường hợp này, vấn đề là định nghĩa hàm bị thiếu dấu hai chấm ở cuối

Trên thực tế, chức năng trên có hai vấn đề với cú pháp. Nếu chúng ta khắc phục sự cố với dấu hai chấm, chúng ta sẽ thấy rằng cũng có một

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
4, có nghĩa là các dòng trong định nghĩa hàm không phải tất cả đều có cùng một vết lõm

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
2

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
3

Cả

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
3 và
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
4 đều chỉ ra vấn đề với cú pháp chương trình của bạn, nhưng
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
4 cụ thể hơn. điều đó luôn có nghĩa là có vấn đề với cách mã của bạn được thụt vào

Khoảng trắng. tab và không gian

Ghi chú nhanh về lỗi thụt lề. đôi khi chúng có thể ngấm ngầm, đặc biệt nếu bạn đang trộn dấu cách và tab. Vì cả hai đều là "khoảng trắng" nên rất khó để phân biệt bằng mắt thường. Sổ tay IPython thực sự cung cấp cho chúng ta một chút gợi ý, nhưng không phải trình soạn thảo Python nào cũng làm được điều đó. Trong ví dụ sau, hai dòng đầu tiên đang sử dụng tab để thụt lề, trong khi dòng thứ ba sử dụng bốn khoảng trắng

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
7

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
8

Theo mặc định, một tab tương đương với tám dấu cách, vì vậy cách duy nhất để trộn các tab và dấu cách là làm cho nó trông như thế này. Nói chung, tốt hơn là không bao giờ sử dụng các tab và luôn sử dụng khoảng trắng, vì nó có thể khiến mọi thứ trở nên rất khó hiểu

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
0

Thách đấu. xác định lỗi cú pháp

  1. Đọc mã bên dưới và [không chạy mã] cố gắng xác định lỗi là gì
  2. Chạy ô và đọc thông báo lỗi. Nó là một
    ---------------------------------------------------------------------------
    KeyError                                  Traceback [most recent call last]
     in []
          1 from errors_02 import print_friday_message
    ----> 2 print_friday_message[]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
         13 
         14 def print_friday_message[]:
    ---> 15     print_message["Friday"]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
          9         "sunday": "Aw, the weekend is almost over."
         10     }
    ---> 11     print messages[day]
         12 
         13 
    
    KeyError: 'Friday'
    3 hay một
    ---------------------------------------------------------------------------
    KeyError                                  Traceback [most recent call last]
     in []
          1 from errors_02 import print_friday_message
    ----> 2 print_friday_message[]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
         13 
         14 def print_friday_message[]:
    ---> 15     print_message["Friday"]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
          9         "sunday": "Aw, the weekend is almost over."
         10     }
    ---> 11     print messages[day]
         12 
         13 
    
    KeyError: 'Friday'
    4?
  3. Sửa lỗi
  4. Lặp lại bước 2 và 3 cho đến khi bạn sửa được tất cả các lỗi

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
1

Lỗi tên biến

Một loại lỗi rất phổ biến khác được gọi là

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
5 và xảy ra khi bạn cố gắng sử dụng một biến không tồn tại. Ví dụ

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
2

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
3

Lỗi tên biến đi kèm với một số thông báo lỗi thông tin nhất, thường có dạng "tên 'tên_biến' không được xác định"

Tại sao thông báo lỗi này xảy ra? . Tuy nhiên, có một vài lý do rất phổ biến khiến bạn có thể có một biến không xác định. Đầu tiên là bạn muốn sử dụng một chuỗi, nhưng quên đặt dấu ngoặc kép xung quanh nó

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
4

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
5

Thứ hai là bạn quên tạo biến trước khi sử dụng nó. Trong ví dụ sau, lẽ ra

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
95 phải được xác định [e. g. , với
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
96] trước vòng lặp for

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
6

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
7

Cuối cùng, khả năng thứ ba là bạn đã mắc lỗi đánh máy khi viết mã. Giả sử chúng ta đã sửa lỗi ở trên bằng cách thêm dòng

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
97 trước vòng lặp for. Bực bội, điều này thực sự không sửa lỗi. Hãy nhớ rằng các biến phân biệt chữ hoa chữ thường, vì vậy biến
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
95 khác với biến
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
99. Chúng tôi vẫn gặp lỗi tương tự vì chúng tôi vẫn chưa xác định
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
95

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
8

---------------------------------------------------------------------------
IndexError                                Traceback [most recent call last]
 in []
      1 from errors_01 import favorite_ice_cream
----> 2 favorite_ice_cream[]

/Users/jhamrick/project/swc/novice/python/errors_01.pyc in favorite_ice_cream[]
      5         "strawberry"
      6     ]
----> 7     print ice_creams[3]

IndexError: list index out of range
9

Thách đấu. xác định lỗi tên biến

  1. Đọc mã bên dưới và [không chạy mã] cố gắng xác định lỗi là gì
  2. Chạy ô và đọc thông báo lỗi. Bạn nghĩ đây là loại
    ---------------------------------------------------------------------------
    KeyError                                  Traceback [most recent call last]
     in []
          1 from errors_02 import print_friday_message
    ----> 2 print_friday_message[]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
         13 
         14 def print_friday_message[]:
    ---> 15     print_message["Friday"]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
          9         "sunday": "Aw, the weekend is almost over."
         10     }
    ---> 11     print messages[day]
         12 
         13 
    
    KeyError: 'Friday'
    5 nào?
  3. Sửa lỗi
  4. Lặp lại bước 2 và 3 cho đến khi bạn sửa được tất cả các lỗi

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
50

Lỗi mặt hàng

Tiếp theo là các lỗi liên quan đến vùng chứa [như danh sách và từ điển] và các mục bên trong chúng. Nếu bạn cố gắng truy cập một mục trong danh sách hoặc từ điển không tồn tại, thì bạn sẽ gặp lỗi. Điều này thật ý nghĩa. Hãy suy nghĩ về một ví dụ thực tế cuộc sống. nếu bạn hỏi ai đó muốn uống cà phê vào ngày nào và họ trả lời là "thứ bảy", bạn có thể hơi khó chịu [mặc dù, có lẽ sau khi cảm thấy thích thú khi ai đó nghĩ ra ý tưởng về thứ bảy]. Python cũng khó chịu tương tự nếu bạn cố hỏi nó về một mục không tồn tại

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
51

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
52
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
53

Ở đây, Python đang nói với chúng ta rằng có một

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
7 trong mã của chúng ta, nghĩa là chúng ta đã cố truy cập vào một chỉ mục danh sách không tồn tại

Chúng tôi gặp lỗi tương tự trong trường hợp từ điển

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
54

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
55

Trong trường hợp này, chúng tôi nhận được một

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
6, có nghĩa là khóa mà chúng tôi đã yêu cầu [
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
24, như thông báo lỗi cho chúng tôi biết] không có trong từ điển. Điều này có thể là do nó thực sự không tồn tại trong từ điển, nhưng cũng có thể là do lỗi đánh máy. Điều này tương tự như trường hợp chúng tôi đã thảo luận ở trên, đôi khi bạn có thể nhận được
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
5 do lỗi đánh máy. Ví dụ

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
56

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
57

Thách đấu. xác định lỗi mục

  1. Đọc mã bên dưới và [không chạy mã] cố gắng xác định lỗi là gì
  2. Chạy ô và đọc thông báo lỗi. Nó là một
    ---------------------------------------------------------------------------
    KeyError                                  Traceback [most recent call last]
     in []
          1 from errors_02 import print_friday_message
    ----> 2 print_friday_message[]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
         13 
         14 def print_friday_message[]:
    ---> 15     print_message["Friday"]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
          9         "sunday": "Aw, the weekend is almost over."
         10     }
    ---> 11     print messages[day]
         12 
         13 
    
    KeyError: 'Friday'
    7 hay một
    ---------------------------------------------------------------------------
    KeyError                                  Traceback [most recent call last]
     in []
          1 from errors_02 import print_friday_message
    ----> 2 print_friday_message[]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
         13 
         14 def print_friday_message[]:
    ---> 15     print_message["Friday"]
    
    /Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
          9         "sunday": "Aw, the weekend is almost over."
         10     }
    ---> 11     print messages[day]
         12 
         13 
    
    KeyError: 'Friday'
    6?
  3. Sửa lỗi
  4. Lặp lại bước 2 và 3 cho đến khi bạn sửa được tất cả các lỗi

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
58

Lỗi tệp

Loại lỗi cuối cùng chúng tôi sẽ đề cập hôm nay là những lỗi liên quan đến việc đọc và ghi tệp.

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
8. "IO" trong
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
8 là viết tắt của "input/output", đây chỉ là một cách nói thú vị của "viết/đọc"

Nếu bạn cố đọc một tệp không tồn tại, bạn sẽ nhận được thông báo ________ 08 cho bạn biết như vậy. Đây là lý do phổ biến nhất khiến bạn nhận được

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
8 và nếu thông báo lỗi cho biết "không có tệp hoặc thư mục như vậy", thì bạn biết mình vừa cố truy cập một tệp không tồn tại

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
59

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
0

Một lý do khiến bạn nhận được lỗi này là do bạn đã chỉ định đường dẫn đến tệp không chính xác. Ví dụ: nếu tôi hiện đang ở trong một thư mục có tên là

---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
32 và tôi có một tệp trong
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
33, nhưng tôi cố gắng chỉ mở
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
34, thao tác này sẽ không thành công. Đường dẫn chính xác sẽ là
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
35. Cũng có thể [như với
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
5 và
---------------------------------------------------------------------------
KeyError                                  Traceback [most recent call last]
 in []
      1 from errors_02 import print_friday_message
----> 2 print_friday_message[]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_friday_message[]
     13 
     14 def print_friday_message[]:
---> 15     print_message["Friday"]

/Users/jhamrick/project/swc/novice/python/errors_02.py in print_message[day]
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print messages[day]
     12 
     13 

KeyError: 'Friday'
6] bạn vừa mắc lỗi đánh máy

Một vấn đề khác có thể là bạn đã sử dụng cờ "đọc" thay vì cờ "ghi". Python sẽ không báo lỗi cho bạn nếu bạn cố mở tệp để ghi khi tệp không tồn tại. Tuy nhiên, nếu bạn định mở một tệp để đọc, nhưng lại vô tình mở tệp đó để ghi và sau đó cố đọc từ tệp đó, bạn sẽ gặp lỗi thông báo rằng tệp không được mở để đọc

Tại sao tôi gặp lỗi truy nguyên trong Python?

Dòng thông báo lỗi của truy nguyên NameError cung cấp cho bạn tên bị thiếu. Trong ví dụ trên, đó là một biến sai chính tả hoặc tham số của hàm được truyền vào .

Là truy nguyên một ngoại lệ?

Truy xuất ngược là theo dõi ngăn xếp từ điểm của trình xử lý ngoại lệ trong chuỗi cuộc gọi đến điểm mà ngoại lệ được đưa ra . Bạn cũng có thể làm việc với ngăn xếp lệnh gọi hiện tại từ điểm gọi [và không có ngữ cảnh lỗi], điều này rất hữu ích để tìm ra các đường dẫn được theo dõi trong một chức năng.

Các lỗi truy nguyên phổ biến trong Python là gì?

Một số lỗi truy nguyên phổ biến là. Lỗi phím . TypeError . valueError . Lỗi nhập /ModuleNotFound .

Chủ Đề