Có một số loại lỗi trong Python giúp bạn gỡ lỗi mã của mình. Khi bạn chạy mã của mình, trước tiên Python sẽ kiểm tra mọi lỗi cú pháp rồi chạy mã. Các lỗi được ném khi mã được chạy được gọi là lỗi thời gian chạy. Trong hướng dẫn này, bạn sẽ tìm hiểu một số loại lỗi thời gian chạy khác nhau và cách khắc phục chúng
Runtimeerror trong Python là gì?
Lỗi thời gian chạy là một loại ngoại lệ python tích hợp được ném vào thời gian chạy. Có nhiều loại lỗi thời gian chạy khác nhau, chúng tôi sẽ đề cập đến chúng trong bài viết này. Một số ví dụ bao gồm lỗi loại và lỗi tên. Lỗi thời gian chạy thuộc nhóm ngoại lệ cụ thể lớn hơn trong Python
Điều gì gây ra lỗi thời gian chạy trong Python?
Có nhiều thứ có thể gây ra lỗi thời gian chạy tùy thuộc vào loại lỗi được đưa ra. Một số nguyên nhân phổ biến của lỗi thời gian chạy bao gồm
- chia cho số không
- sử dụng các loại không chính xác trong các hoạt động
- lập chỉ mục vượt quá độ dài của danh sách
- truy cập một khóa trong từ điển không tồn tại
- sử dụng các biến chưa được xác định
- cố gắng truy cập một tập tin không tồn tại
Làm cách nào để bạn xử lý lỗi thời gian chạy trong Python?
Cách bạn xử lý lỗi thời gian chạy tùy thuộc vào lỗi cụ thể đã xảy ra. Một khi cách để xử lý các lỗi thời gian chạy thường là sử dụng khối try/ngoại trừ. Bạn có thể chỉ định cách bạn muốn xử lý mã trong trường hợp có lỗi trong khối ngoại trừ, đây là một ví dụ
>>> y = 12 >>> x = 0 >>> try: .. z = y / x >>> except: ...print("An error occurred") ...z = 0Bằng cách này, bạn được cảnh báo về lỗi mà không có ngoại lệ nào bị ném và dừng mã của bạn
Ví dụ về lỗi thời gian chạy là gì?
Chúng ta hãy xem một số ví dụ về các lỗi thời gian chạy phổ biến và cách khắc phục chúng
Lỗi phân chia số 0 được nâng lên
Một ZeroDivisionError được đưa ra khi bạn cố gắng chia hoặc modulo cho 0 trong mã của mình, chẳng hạn
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zeroChúng tôi có thể tránh điều này bằng cách thêm một kiểm tra để đảm bảo rằng số chúng tôi đang sửa đổi không phải là 0 trước khi chúng tôi thực hiện thao tác
>>> x = 0 >>> y = 2 >>> if (x != 0) and (y % x == 0): ...print(y, "is divisible by", x)Loại lỗi
Một TypeError được đưa ra khi bạn cố gắng thực hiện một thao tác với các loại không chính xác. Ví dụ: nếu bạn cố nối một số nguyên và một chuỗi, bạn sẽ gặp lỗi loại
>>> x = "1" >>> y = 2 >>> z = x + y Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'Lỗi cũng sẽ chỉ định thao tác nào đang gây ra lỗi và loại bạn đang cố sử dụng. Trong trường hợp này, chúng tôi có thể giải quyết lỗi này bằng cách chuyển tất cả các biến thành số nguyên để đảm bảo rằng chúng tôi chỉ thêm số nguyên
>>> x = "1" >>> y = 2 >>> z = int(x) + int(y) >>> print(x+y) 3Một nguyên nhân phổ biến khác gây ra lỗi loại là cố lặp qua một loại không chính xác. Ví dụ: cố gắng lặp qua một số nguyên
>>> for i in 10: ...print(i) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not iterableTrong trường hợp này, lỗi cho chúng tôi biết rằng chúng tôi đang cố gắng lặp qua một số nguyên, đây không phải là loại mà chúng tôi có thể lặp qua. Thay vào đó, chúng tôi muốn sử dụng vòng lặp for-range
>>> for i in range(10): ...print(i) 0 1 ...Lỗi phím
Lỗi KeyError xuất hiện khi bạn đang cố truy cập một khóa trong từ điển không tồn tại. Ví dụ
>>> d = {1: ["a"], 2: ["b"]} >>> print(d[3]) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 3Lỗi sẽ chỉ định khóa nào bạn đang cố truy cập không tồn tại. Bạn có thể khắc phục điều này bằng cách đảm bảo kiểm tra xem khóa có trong từ điển hay không trước khi thử truy cập khóa cụ thể đó. Bạn có thể kiểm tra xem một khóa có tồn tại trong từ điển hay không bằng cách sử dụng hàm in, hàm này trả về một giá trị boolean
________số 8Lỗi chỉ mục
Lỗi chỉ mục là do lập chỉ mục vào danh sách có chỉ mục nằm ngoài giới hạn
>>> L = [1,2,3] >>> for i in range(10): ...print(L[i])Chúng ta có thể khắc phục điều này bằng cách điều chỉnh vòng lặp for chỉ lặp trong phạm vi của danh sách hoặc thêm kiểm tra trước khi lập chỉ mục vào danh sách để đảm bảo chỉ mục nằm trong phạm vi
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 0hoặc là
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 1Tên Lỗi
Một NameError được đưa ra khi bạn cố gắng sử dụng một biến chưa được xác định. Ví dụ
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 2Bạn có thể khắc phục điều này bằng cách xác định biến trước khi nó được sử dụng
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 3Lỗi tên cũng có thể xảy ra nếu bạn cố gắng sử dụng một biến đã được xác định nhưng nằm ngoài phạm vi. Ví dụ: nếu bạn cố gắng sử dụng một biến cục bộ được xác định bên trong một hàm trên toàn cầu
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 4Để khắc phục điều này, hãy đảm bảo rằng bạn chỉ đang cố truy cập các biến nằm trong phạm vi
Lỗi không tìm thấy tệp
Một FileNotFoundError được đưa ra khi bạn cố gắng truy cập một tệp không tồn tại trong thư mục bạn đã chỉ định
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 5Có một số cách để giải quyết lỗi. Trước tiên, bạn nên kiểm tra để đảm bảo rằng tệp bạn đang cố truy cập nằm trong thư mục hiện tại của bạn. Nếu không, hãy đảm bảo chỉ định đường dẫn tệp đầy đủ khi cố gắng truy cập tệp đó, chẳng hạn
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 6Làm cách nào để sửa lỗi giá trị trong Python?
Lỗi giá trị xảy ra do cung cấp cho hàm một đối số đúng loại, nhưng giá trị không chính xác. Ví dụ
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 7Ở đây chúng tôi nhận được một lỗi vì toán học. hàm sqrt chỉ hoạt động với số nguyên dương hoặc số không. Chúng ta có thể ngăn lỗi này bằng cách đảm bảo rằng mọi thứ được truyền vào hàm đều lớn hơn hoặc bằng 0
Điều gì gây ra lỗi tràn?
Lỗi tràn là do một phép toán số học quá lớn để Python có thể biểu diễn
Ví dụ
>>> x = 0 >>> y = 2 >>> if y % x == 0: ...print(y, :is divisible by", x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero 8Bạn có thể ngăn lỗi tràn bằng cách đảm bảo rằng các số bạn chuyển vào các hàm không quá lớn
Tóm lược
Trong hướng dẫn này, bạn đã học được các lỗi thời gian chạy, thời điểm chúng xảy ra và nhiều cách để khắc phục chúng. Đầu tiên, bạn đã biết rằng lỗi thời gian chạy là một loại ngoại lệ được ném vào thời gian chạy. Tiếp theo, bạn đã tìm hiểu một số nguyên nhân phổ biến gây ra lỗi thời gian chạy như chia cho 0 và sử dụng các loại thao tác không chính xác. Sau đó, bạn đã học cách xử lý chung các lỗi thời gian chạy bằng cách sử dụng khối thử-ngoại trừ. Cuối cùng, bạn đã xem xét một số ví dụ về những thứ có thể gây ra lỗi thời gian chạy và cách giải quyết chúng, bao gồm một số lỗi ít phổ biến hơn như lỗi tràn và lỗi giá trị
Bước tiếp theo
Nếu bạn muốn tìm hiểu thêm về những kiến thức cơ bản về Python, mã hóa và phát triển phần mềm, hãy xem Sách hướng dẫn những điều cơ bản về mã hóa dành cho nhà phát triển của chúng tôi, nơi chúng tôi đề cập đến các ngôn ngữ, khái niệm và công cụ thiết yếu mà bạn sẽ cần để trở thành một nhà phát triển chuyên nghiệp
Cảm ơn và mã hóa hạnh phúc. Chúng tôi hy vọng bạn thích bài viết này. Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, vui lòng liên hệ với jacob@initialcommit. io