Đô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
Lỗi Python có thể có ba loại
- Biên dịch lỗi thời gian [Lỗi cú pháp]
- Lỗi thời gian chạy [Ngoại lệ]
- lỗi logic
Biên dịch lỗi thời gian [Lỗi cú pháp]
Lỗi do không tuân theo đúng cấu trúc [cú pháp] của ngôn ngữ được gọi là lỗi cú pháp hoặc lỗi phân tích cú pháp
Lỗi thời gian chạy [Ngoại lệ]
Ngoại lệ xảy ra trong thời gian chạy. Mã của bạn có thể đúng về mặt cú pháp nhưng có thể xảy ra trường hợp trong thời gian chạy Python gặp phải điều gì đó mà nó không thể xử lý được, sau đó nó sẽ phát sinh một ngoại lệ
lỗi logic
Lỗi logic là lỗi khó sửa nhất. Chúng xảy ra khi chương trình chạy mà không gặp sự cố, nhưng tạo ra kết quả không chính xác. Lỗi là do lỗi trong logic của chương trình. Bạn sẽ không nhận được thông báo lỗi vì không có lỗi cú pháp hoặc thời gian chạy nào xảy ra
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 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
Lỗi thời gian chạy
Cải thiện bài viết
Lưu bài viết
Thích bài viết
- Độ khó. Dễ dàng
- Cập nhật lần cuối. 30 tháng 9 năm 2020
Cải thiện bài viết
Lưu bài viết
Lỗi thời gian chạy
- Lỗi thời gian chạy trong chương trình là lỗi xảy ra trong khi chương trình đang chạy sau khi được biên dịch thành công
- Lỗi thời gian chạy thường được gọi là "lỗi" và thường được tìm thấy trong quá trình gỡ lỗi trước khi phần mềm được phát hành
- Khi lỗi thời gian chạy xảy ra sau khi chương trình được phân phối ra công chúng, nhà phát triển thường phát hành bản vá hoặc bản cập nhật nhỏ được thiết kế để sửa lỗi
- Bất cứ ai cũng có thể tìm thấy danh sách các vấn đề mà họ có thể gặp phải nếu họ là người mới bắt đầu trong bài viết này
- Trong khi giải quyết vấn đề trên các nền tảng trực tuyến, có thể gặp phải nhiều lỗi thời gian chạy không được chỉ định rõ ràng trong thông báo đi kèm. Có nhiều lỗi thời gian chạy xảy ra như lỗi logic, lỗi Đầu vào/Đầu ra, lỗi đối tượng không xác định, lỗi chia cho 0 và nhiều lỗi khác
Các loại lỗi thời gian chạy
- SIGFPE. SIGFPE là một lỗi dấu phẩy động. Nó hầu như luôn được gây ra bởi một phép chia cho 0. Có thể có ba nguyên nhân chính gây ra lỗi SIGFPE được mô tả như sau
- Chia cho số không
- Hoạt động Modulo bằng Zero
- Tràn số nguyên
Dưới đây là chương trình minh họa lỗi SIGFPE
C++
// C++ program to illustrate
// the SIGFPE error
#include
using
namespace
std;
________số 8
int
// the SIGFPE error
0// the SIGFPE error
1// the SIGFPE error
3int
// the SIGFPE error
5// the SIGFPE error
3____18// the SIGFPE error
3// the SIGFPE error
3____22đầu ra
- SIGABRT. Đó là một lỗi được chương trình phát hiện sau đó tín hiệu này được tạo bằng cách gọi hàm abort[]. Tín hiệu này cũng được thư viện tiêu chuẩn sử dụng để báo cáo lỗi nội bộ. hàm assert[] trong C++ cũng sử dụng abort[] để tạo tín hiệu này
Dưới đây là chương trình minh họa lỗi SIGBRT
C++
// C++ program to illustrate
#include
using
namespace
std;
________số 8
int
// the SIGFPE error
0// the SIGFPE error
1// the SIGFPE error
3____38// the SIGFPE error
3int
using
1// the SIGFPE error
3______9____44using
5int
using
7// the SIGFPE error
3____22đầu ra
- New Zealand. Lỗi này biểu thị “Mã thoát khác không”. Đối với người dùng C, lỗi này sẽ được tạo ra nếu phương thức main[] không có câu lệnh return 0. Người dùng Java/C++ có thể tạo ra lỗi này nếu họ đưa ra một ngoại lệ. Dưới đây là những lý do có thể gây ra lỗi NZEC
- Đệ quy vô hạn hoặc nếu bạn hết bộ nhớ ngăn xếp
- Chỉ mục mảng phủ định được truy cập
- ArrayIndexOutOfBound Ngoại lệ
- Ngoại lệ StringIndexOutOfBound
Dưới đây là chương trình minh họa lỗi NZEC
con trăn
namespace
3namespace
4namespace
5namespace
6namespace
7namespace
8____59namespace
9std;
1std;
2std;
3std;
4namespace
9std;
6std;
7std;
8std;
9namespace
5// the SIGFPE error
3____23// the SIGFPE error
3____25// the SIGFPE error
3____27____28std;
9// Driver Code
0đầu ra
- SIGSEGV. Lỗi này là lỗi phổ biến nhất và được gọi là “Lỗi phân đoạn“. Nó được tạo khi chương trình cố gắng truy cập bộ nhớ không được phép truy cập hoặc cố gắng truy cập vị trí bộ nhớ theo cách không được phép. Danh sách một số lý do phổ biến cho lỗi phân đoạn là
- Truy cập một mảng ngoài giới hạn
- Hủy bỏ hội nghị con trỏ NULL
- Dereferencing giải phóng bộ nhớ
- Dereferencing con trỏ chưa được khởi tạo
- Sử dụng sai toán tử “&” [địa chỉ của] và “*” [hội thảo]
- Chỉ định định dạng không đúng trong câu lệnh printf và scanf
- tràn ngăn xếp
- Ghi vào bộ nhớ chỉ đọc
Dưới đây là chương trình minh họa lỗi SIGSEGV
C++
// C++ program to illustrate
// Driver Code
2// Driver Code
3using
namespace
std;
// Driver Code
8// Driver Code
9int
0int
1int
int
3// the SIGFPE error
1// the SIGFPE error
3____22int
7________số 8
int
// the SIGFPE error
0// the SIGFPE error
1// the SIGFPE error
3____106// the SIGFPE error
3____108đầu ra
Các cách để tránh Runtime Errors
- Tránh sử dụng các biến chưa được khởi tạo. Chúng có thể được đặt thành 0 trên hệ thống của bạn nhưng không phải trên nền tảng mã hóa
- Kiểm tra mọi lần xuất hiện của một phần tử mảng và đảm bảo rằng nó không nằm ngoài giới hạn
- Tránh khai báo quá nhiều bộ nhớ. Kiểm tra giới hạn bộ nhớ được chỉ định trong câu hỏi
- Tránh khai báo quá nhiều Stack Memory. Các mảng lớn nên được khai báo trên toàn cầu bên ngoài hàm
- Sử dụng return làm câu lệnh kết thúc
- Tránh tham chiếu bộ nhớ trống hoặc con trỏ null
Ghi chú cá nhân của tôi arrow_drop_up
Tiết kiệm