Hướng dẫn dùng python eof python

Trong khi viết một chương trình một vấn đề rất quan trọng mà các lập trình viên quan tâm đó là: quản lý lỗi xuất hiện trong chương trình. Người lập trình cần ràng buộc tình huống có khả năng xảy ra lỗi, điều này rất khó có thể tính toán được toàn vẹn hết vì không một chương trình nào có thể dự đoán chính xác đầy đủ các lỗi sẽ xảy ra và khi xảy ra lỗi chương trình sẽ xử lý như thế nào. Để giải quyết rong bài viết này chúng tôi sẽ giới thiệu các kỹ thuật dùng để bắt lỗi và bẫy lỗi khi lập trình Python.

Các lỗi thường gặp trong chương trình.

1. Lỗi cú pháp

Python chỉ có thể thực hiện được một chương trình với những câu lệnh đúng theo cú pháp, nếu không, trình thông dịch sẽ đưa ra thông báo lỗi. Trong Python, Nếu trong chương trình có bất cứ lỗi cú pháp nào, Python sẽ hiển thị thông báo lỗi và dừng chạy chương trình.

2. Lỗi thực thi

Dạng thứ hai là lỗi thực thi xuất hiện khi chương trình đã bắt đầu chạy. Những lỗi kiểu này được gọi là biệt lệ bởi vì chúng thường chỉ những điều kiện bất thường phát sinh.

3. Lỗi ngữ nghĩa

Dạng thứ ba là lỗi ngữ nghĩa. Trong trường hợp có lỗi kiểu này, chương trình vẫn chạy thông theo nghĩa máy và không phát thông báo lỗi, nhưng sẽ không thực hiện đúng yêu cầu mong muốn

Trong 3 dạng lỗi trên, dạng 1 chúng ta sẽ xử lý nhờ các trình biên dịch. Khi xảy ra lỗi dạng 1 này sẽ không thông dịch được và công cụ sẽ thông báo. Dạng 3 hầu như phụ thuộc vào kinh nghiệm và kỹ thuật của người lập trình vì nó không thông báo. Chúng ta chỉ có thể phát hiện bằng cách thực hiện các test case. Đối với dạng 2, khi lập trình chúng ta phải quản lý được lỗi và ràng buộc tốt. Vì vậy trong khi lập trình chúng ta phải quản lý các Exception, chúng là sự kiện xảy ra khi một chương trình đang chạy mà phát sinh ra lỗi. Nó sẽ làm gián đoạn chương trình. Có nhiều loại lỗi có thể là lí do của Exception - bao gồm từ lỗi của phần cứng, như hỏng ổ cứng, đến những lỗi do lập trình, như là truy cập đến một phần tử ngoài giới hạn đã khai báo...

Tại sao phải sử dụng Exceptions

Chương trình nào cũng có lỗi, khác nhau ở chổ ít hay nhiều. Để viết một chương trình có ít lỗi nhất đến cho người dùng là điều mà các lập trình viên luôn mong muốn. Để hạn chế tối đa được lỗi trong chương trình, lập trình viên phải sử dụng các kỹ thuật bẫy lỗi để xử lý các exception handler

Các loại Exception phổ biến khi lập trình

1. IO Error

Xảy ra nếu khi tập tin không mở được.

2. Import Error

Nếu Python không tìm thấy được module

3. Value Error

Xảy ra khi một toán tử hoặc hàm trả về không thích hợp

4. Keyboard Interrupt

Xảy ra khi người dùng nhấn phím ngắt [Control-C hoặc Delete]

5. EOF Error

Xảy ra khi sử dụng hàm input hoặc raw_input và gặp end-of-file [EOF] khi đọc tập tin.

Các thông báo thông dụng khi gặp các lỗi trên

except IOError:
print['An error occurred trying to read the file.']

except ValueError:
print['Non-numeric data found in the file.']

except ImportError:
print "NO module found"

except EOFError:
print['Why did you do an EOF on me?']

except KeyboardInterrupt:
print['You cancelled the operation.']

except:
print['An error occurred.']

Cách cài đặt và bẫy lỗi trong Python

Cấu trúc đơn giản nhất

try:     some statements here 
except:     exception handling

Những đoạn code có khả năng xảy ra lỗi sẽ đặt trong Try

Thông báo lỗi sẽ đặt trong except

Nếu một biệt lệ xảy ra, phần trong Try sẽ được bỏ qua và thực hiện trong phần Except

Sau đây là một số ví dụ thực hành

Ví dụ 1.

Ví dụ về lỗi của chương trình

1 [x,y] = [5,0]

2 z = x/y

Chương trình trên khi chạy sẽ có lỗi vì mẫu bằng 0

Khi viết đoạn chương trình trên ta phải sử dụng kỹ thuật bẫy lỗi. Đoạn chương trình được viết lại như sau:

1 [x,y] = [5,0]
2 try:
3 z = x/y
4 except ZeroDivisionError:
5 print "divide by zero" 

Khi đó chương trình chạy nếu có lỗi sẽ hiển thị divide by zero

Nếu chúng ta muốn kiểm tra code trong chương trình sẽ xuất ra màn hình như thế nào. Chúng ta chỉnh sửa lại chương trình như sau:

1 [x,y] = [5,0]
2 try:    
3   z = x/y    
4 except ZeroDivisionError, e:    
5   z = e    
6 print z 

Khi đó tại dòng 5. Gán z = e khi đó biến z sẽ thay thế ngoại e để hiển thị ra màn hình khi chạy lệnh Print ở dòng 6

# representation: ""

# output: "integer division or modulo by zero"

Ví dụ 2.

Chương trình 

number = int[raw_input["Enter a number between 1 - 10"]]

print "you entered number", number

Nếu bạn nhập từ 1 đến 10 thì không có chuyện gì xảy ra. Nhưng nếu bạn gặp chữ Hello

Chương trình sẽ báo lỗi

Traceback [most recent call last]:

File "enter_number.py", line 1, in

number = int[raw_input["Enter a number between 1 - 10 "]]

ValueError: invalid literal for int[] with base 10: 'hello' 

Do đó chúng ra sẽ cải thiện lại như sauimport sys

print "Lets fix the previous code with exception handling"

try:
number = int[raw_input["Enter a number between 1 - 10 "]]

except ValueError:
print "Err.. numbers only"
sys.exit[]

print "you entered number ", number

Bài viết mô tả cách cơ bản nhất để bẫy lỗi khi sử dụng ngôn ngữ Python, ngoài ra trong ngôn ngữ Python còn có các kỹ thuật nâng cao hơn khi xử lý lỗi. Các nội dung trên sẽ được trình bày trong các bài sau. Chúc các bạn trải nghiệm thành công.

Huỳnh Phước Hải

Chủ Đề