You are on page 1of 29

LẬP TRÌNH PYTHON

TRONG PHÂN TÍCH DỮ LIỆU


LÀM VIỆC VỚI TẬP TIN
TRONG NGÔN NGỮ LẬP TRÌNH PYTHON

TRẦN DOÃN HIẾU


NỘI DUNG
• Ngoại lệ và xử lý ngoại lệ
• Đọc thông tin từ tập tin
Bài 6: Ngoại lệ và Tập tin

• Ghi thông tin vào tập tin


• Một số ứng dụng đọc và ghi tập tin

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
LÀM VIỆC VỚI NGOẠI LỆ
Bài 6: Ngoại lệ và Tập tin

Trần Doãn Hiếu


NGOẠI LỆ
• Lỗi chương trình
– Lỗi khi viết chương trình
Bài 6: Ngoại lệ và Tập tin

• Làm cho chương trình không chạy được (thông dịch) hoặc
không dịch được (biên dịch) hoặc chương trình chạy được
nhưng không cho kết quả như mong đợi

– Lỗi khi chạy chương trình


• Làm chương trình không chạy được do dữ liệu nhập không
đúng như yêu cầu

– Ngoại lệ
• Một chức năng nào đó không chạy được do chương trình không
xử lý hết các khả năng có thể xảy ra
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
NGOẠI LỆ
• Lỗi chương trình trong Python
– Lỗi cú pháp (Syntax error)
Bài 6: Ngoại lệ và Tập tin

• Sai cú pháp, khiến chương trình thông dịch không dịch được

– Ngoại lệ (Exception)
• Xảy ra bất thường không như thiết kế

Xử lý ngoại lệ làm cho chương trình ổn định và hoạt động


tốt trong mọi tình huống

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
NGOẠI LỆ
• Ví dụ lỗi cú pháp
Bài 6: Ngoại lệ và Tập tin

• Ví dụ ngoại lệ Làm sao để đảm bảo phép


chia chỉ thực hiện khi y nhận
giá trị số khác 0?

(Ví dụ 1-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
XỬ LÝ NGOẠI LỆ
• Đảm bảo giá trị nhập (x) phải là một số
Bài 6: Ngoại lệ và Tập tin

(Ví dụ 2-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
XỬ LÝ NGOẠI LỆ
• Đảm bảo giá trị nhập (y) phải là số khác 0 và thực
hiện phép chia 1/y
Bài 6: Ngoại lệ và Tập tin

Nơi phát sinh và nơi xử lý lỗi

Nơi phát sinh và nơi xử lý lỗi

(Ví dụ 3-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
XỬ LÝ NGOẠI LỆ
• Các thành phần của cấu trúc try except-else-finally
– try: đoạn mã có khả năng gây lỗi, khi lỗi xảy ra, khối này
sẽ bị dừng ở dòng gây lỗi
Bài 6: Ngoại lệ và Tập tin

– except: đoạn mã xử lý lỗi, chỉ thực hiện nếu có lỗi xảy


ra, nếu không sẽ bị bỏ qua
– else: có thể xuất hiện ngay sau khối except cuối cùng,
đoạn mã sẽ được thực hiện nếu không có except nào
được thực hiện (đoạn try không có lỗi)
– finally: luôn được thực hiện dù có xảy ra lỗi hay không

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
XỬ LÝ NGOẠI LỆ
• Chú ý:
– try chỉ có 1 khối duy nhất, phải viết đầu tiên
Bài 6: Ngoại lệ và Tập tin

– finally có thể có hay không, nếu có thì khối này phải viết
cuối cùng
– except có thể không viết, có một khối, hoặc nhiều khối
except (để xử lý nhiều tình huống lỗi khác nhau)
– except có thể xử lý một loại lỗi, nhiều loại lỗi hoặc tất cả
các loại lỗi
– Nếu không xử lý triệt để lỗi có thể “ném” trả lại lỗi này
bằng lệnh “raise”
– Có thể phát sinh một ngoại lệ bằng lệnh “raise ”
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
XỬ LÝ NGOẠI LỆ
• Các thành phần của cấu trúc try ... except ...
Bài 6: Ngoại lệ và Tập tin

Khối xử lý nếu có lỗi

Khối xử lý nếu không có lỗi

Khối dọn dẹp, có lỗi lẫn không có lỗi

(Ví dụ 4-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
XỬ LÝ NGOẠI LỆ
Bài 6: Ngoại lệ và Tập tin

(Ví dụ 5-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
CÁC NGOẠI LỆ THƯỜNG GẶP
Ngoại lệ Lý do gây ra
AssertionError Xảy ra khi câu lệnh assert thất bại.
AttributeError Xảy ra khi gán thuộc tính hoặc tham chiếu thất bại.
EOFError Xảy ra khi hàm input () chạm vào điều kiện end-of-file.
Bài 6: Ngoại lệ và Tập tin

Xảy ra khi một số thực dấy phẩy động thực thi không thành
FloatingPointError
công
GeneratorExit Xảy ra khi phương thức close() của hàm generator được gọi.
ImportError Xảy ra khi không tìm thấy module được import.
Xảy ra khi một chỉ số trong chuỗi (sequence) nằm ngoài phạm
IndexError
vi.
Xảy ra khi không tìm thấy khóa ánh xạ (từ điển) trong tập hợp
KeyError
các khóa hiện có.
Xảy ra khi người dùng nhấn phím ngắt (thông thường là Ctrl-C
KeyboardInterrupt
hoặc Delete).

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
CÁC NGOẠI LỆ THƯỜNG GẶP
Ngoại lệ Lý do gây ra
Xảy ra khi một operation hết bộ nhớ nhưng tình huống vẫn
MemoryError
có thể được sửa chữa (bằng cách xóa một số đối tượng).
Xảy ra khi không tìm thấy tên cục bộ hoặc toàn cầu của
NameError
Bài 6: Ngoại lệ và Tập tin

biến.
Xảy ra bằng các phương thức trừu tượng khi chúng yêu
NotImplementedError
cầu các lớp dẫn xuất ghi đè phương thức.
OSError Xảy ra khi một hàm trả về lỗi liên quan đến hệ thống
Xảy ra khi kết quả của phép toán số học quá lớn không thể
OverflowError
biểu diễn.
Xảy ra khi một proxy tham chiếu yếu sử dụng để truy cập
ReferenceError
một thuộc tính của tham chiếu sau khi thu thập rác.
Xảy ra khi phát hiện thấy lỗi không thuộc bất kỳ danh mục
RuntimeError
nào khác.

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
CÁC NGOẠI LỆ THƯỜNG GẶP
Ngoại lệ Lý do gây ra
Xảy ra bằng phương thức next() của một vòng lặp để báo
StopIteration
hiệu rằng không có giá trị nào được trả về bởi iterator.
SyntaxError Xảy ra khi gặp lỗi cú pháp.
Bài 6: Ngoại lệ và Tập tin

IndentationError Xảy ra khi có lỗi thụt lề không chính xác.


Xảy ra khi thụt lề sử dụng các tab và dấu cách không nhất
TabError
quán.
Xảy ra khi trình thông dịch tìm thấy các lỗi nội bộ nhưng
SystemError
tình hình không quá nghiêm trọng.
SystemExit Xảy ra bởi hàm sys.exit().
Xảy ra khi một hàm hoặc phép thực thi (operation) áp dụng
TypeError
kiểu không chính xác cho một đối tượng.

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
CÁC NGOẠI LỆ THƯỜNG GẶP
Ngoại lệ Lý do gây ra
Xảy ra khi tham chiếu tạo thành một biến cục bộ trong một
UnboundLocalError hàm hoặc phương thức, nhưng không có giá trị nào bị ràng
buộc với biến đó.
Bài 6: Ngoại lệ và Tập tin

UnicodeError Xảy ra khi có lỗi liên quan đến Unicode


Xảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình
UnicodeEncodeError
mã hóa.
Xảy ra khi lỗi liên quan đến Unicode diễn ra trong quá trình
UnicodeDecodeError
giải mã.
UnicodeTranslateError Xảy ra khi lỗi liên quan đến Unicode trong quá trình dịch.
Xảy ra khi một phép toán hoặc hàm nhận được một đối số
ValueError
có kiểu đúng nhưng giá trị không phù hợp
Xảy ra khi đối số thứ hai của phép chia hoặc phép toán
ZeroDivisionError
modulo bằng 0.

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
BÀI TẬP THỰC HÀNH
Bài 6: Ngoại lệ và Tập tin

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
LÀM VIỆC VỚI TẬP TIN
Bài 6: Ngoại lệ và Tập tin

Trần Doãn Hiếu


QUY TRÌNH THỰC HIỆN
• Làm việc với tập tin trong python gồm 3 bước:
1. Mở file
Bài 6: Ngoại lệ và Tập tin

2. Đọc/ghi file
3. Đóng file

• Các bước nói trên đều có thể phát sinh ngoại lệ


IOError

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
MỞ VÀ ĐÓNG TẬP TIN
• Mở file:
– f = open(filename, mode)
• Các chế độ mở file hay sử dụng:
Bài 6: Ngoại lệ và Tập tin

– ‘r’: chỉ đọc


– ‘w’: chỉ ghi (và ghi đè)
– ‘a’: ghi vào cuối file
– ‘r+’: cả đọc và ghi
– ‘t’: mở file văn bản (mặc định)
– ‘b’: mở file nhị phân
• Đóng file:
– f.close()

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
MỞ VÀ ĐÓNG TẬP TIN
Bài 6: Ngoại lệ và Tập tin

(Ví dụ 6-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
MỞ VÀ ĐÓNG TẬP TIN
• Mở và đóng tập tin sau khi sử dụng xong
Bài 6: Ngoại lệ và Tập tin

Tập tin sau khi sử dụng xong sẽ đóng lại


(ngay cả khi có lỗi phát sinh trong quá trình thực hiện các thao tác)

(Ví dụ 7-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
ĐỌC VÀ GHI TẬP TIN
• Đọc tập tin
– read(x): đọc x byte tiếp theo, nếu không viết x thì sẽ đọc đến
cuối file
Bài 6: Ngoại lệ và Tập tin

– readline(x): đọc 1 dòng từ file, tối đa là x byte, nếu không viết


x thì đọc tới khi nào gặp kí tự hết dòng hoặc hết file
– readlines(x): đọc các dòng cho đến hết file và trả về một
danh sách các string, nếu viết x thì sẽ đọc tối đa là x byte

• Ghi tập tin


– write(x): ghi x ra file, trả về số byte ghi được
– writelines(x): ghi toàn bộ nội dung x theo từng dòng, ở đây x
là list of string

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
MỞ VÀ GHI TẬP TIN VĂN BẢN
Bài 6: Ngoại lệ và Tập tin

Mở tập tin ch6_08.txt trong thư mục hiện hành và ghi nội
dung với mã Unicode (ghi đè nếu tập tin này đã có)

(Ví dụ 8-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
MỞ VÀ ĐỌC TẬP TIN VĂN BẢN
Bài 6: Ngoại lệ và Tập tin

Mở tập tin ch6_08.txt trong thư mục hiện hành và đọc


nội dung với mã mặc định (ASCII)

(Ví dụ 9-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
MỞ VÀ ĐỌC TẬP TIN VĂN BẢN
Bài 6: Ngoại lệ và Tập tin

(Ví dụ 10-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
ĐỌC TẬP TIN
• Sử dụng phương thức read(size)
Bài 6: Ngoại lệ và Tập tin

(Ví dụ 11-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
ĐỌC TẬP TIN
• Sử dụng phương thức read, tell và seek
Bài 6: Ngoại lệ và Tập tin

(Ví dụ 12-Chương 6)
… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu
BÀI TẬP THỰC HÀNH
Bài 6: Ngoại lệ và Tập tin

… những bước chập chững vào thế giới Khoa học dữ liệu … Trần Doãn Hiếu

You might also like