Khi viết mã bằng Python, bạn thường có thể đoán trước được các lỗi thời gian chạy ngay cả trong một chương trình đúng về mặt cú pháp và logic. Những lỗi này có thể do đầu vào không hợp lệ hoặc một số mâu thuẫn có thể dự đoán được. Trong Python, bạn có thể sử dụng khối try và khối ngoại trừ để xử lý hầu hết các lỗi này dưới dạng ngoại lệ

Bạn đang xem: python làm cách nào để thử ngoại trừ công việc

Khi viết mã trong Python, bạn thường có thể đoán trước các lỗi thời gian chạy ngay cả trong một chương trình đúng về mặt cú pháp và logic. Những lỗi này có thể do đầu vào không hợp lệ hoặc một số mâu thuẫn có thể dự đoán được.

Trong Python, bạn có thể sử dụng các khối try ngoại trừ để xử lý hầu hết các lỗi này dưới dạng ngoại lệ một cách linh hoạt hơn.

Trong hướng dẫn này, bạn sẽ học cú pháp chung của thử ngoại trừ . Sau đó, chúng ta sẽ tiến hành viết mã các ví dụ đơn giản, thảo luận những gì có thể xảy ra sai sót và đưa ra các biện pháp khắc phục bằng cách sử dụng cú pháp try ngoại trừ .

Cú pháp của Python Thử và Ngoại trừ Khối

Hãy bắt đầu bằng cách hiểu cú pháp của try Ngoại trừ < / code> câu lệnh trong Python. Mẫu chung được hiển thị bên dưới:

  hãy thử:
# Có thể có lỗi trong khối này
    
ngoại trừ & lt; loại lỗi & gt ;:
# Làm điều này để xử lý ngoại lệ;
# được thực thi nếu khối try thông báo lỗi
    
khác:
# Làm điều này nếu khối try thực thi thành công mà không có lỗi
   
cuối cùng:
# Khối này luôn được thực thi
 

Hãy xem các khối khác nhau được sử dụng để làm gì:

  • Khối try là khối các câu lệnh mà bạn thích thử thực hiện. Tuy nhiên, có thể có lỗi thời gian chạy do một ngoại lệ và khối này có thể không hoạt động như dự kiến.
  • Khối ngoại trừ được kích hoạt khi try khối không thành công do một ngoại lệ. Nó chứa một tập hợp các câu lệnh thường cung cấp cho bạn một số ngữ cảnh về những gì đã xảy ra bên trong khối try .
  • Bạn phải luôn đề cập đến loại lỗi mà bạn dự định mắc phải là ngoại lệ bên trong khối ngoại trừ , được biểu thị bằng trình giữ chỗ & lt; loại lỗi & gt; trong đoạn mã trên.
  • Bạn cũng có thể sử dụng ngoại trừ mà không chỉ định & lt; loại lỗi & gt; . Tuy nhiên, đây không phải là phương pháp được khuyến nghị vì bạn không tính đến các loại lỗi khác nhau có thể xảy ra.

Khi cố gắng thực thi mã bên trong hãy thử block, cũng có khả năng xảy ra nhiều lỗi.

Ví dụ: bạn có thể đang truy cập một danh sách bằng cách sử dụng chỉ mục nằm ngoài phạm vi, sử dụng sai khóa từ điển và cố gắng mở một tệp không tồn tại - tất cả đều nằm trong khối try .

Trong trường hợp này, bạn có thể gặp phải IndexError , KeyError FileNotFoundError . Và bạn phải thêm nhiều khối ngoại trừ như số lỗi mà bạn dự đoán, mỗi khối cho mỗi loại lỗi.

  • else khối chỉ được kích hoạt nếu khối try được thực thi mà không có lỗi. Điều này có thể hữu ích khi bạn muốn thực hiện một hành động tiếp theo khi khối try thành công. Ví dụ: nếu bạn thử và mở một tệp thành công, bạn có thể muốn đọc nội dung của nó.
  • Khối cuối cùng luôn được thực thi, bất kể điều gì xảy ra trong các khối khác. Điều này hữu ích khi bạn muốn giải phóng tài nguyên sau khi thực thi một khối mã cụ thể.

Lưu ý : else cuối cùng là tùy chọn. Trong hầu hết các trường hợp, bạn chỉ có thể sử dụng khối try để thử làm điều gì đó và bắt lỗi dưới dạng ngoại lệ bên trong khối ngoại trừ .

Trong phần tiếp theo vài phút, bạn sẽ sử dụng những gì bạn đã học được cho đến nay để xử lý các ngoại lệ trong Python. Hãy bắt đầu.

Cách xử lý ZeroDivisionError trong Python

Hãy xem xét hàm chia () được hiển thị bên dưới. Nó nhận hai đối số - num div - và trả về thương số của phép chia num / div .

 < code class = "language-Python"> def split (num, div):
  return num / div  

▶ Gọi hàm với các số khác nhau sẽ trả về kết quả như mong đợi:

  res = split (100, số 8)
in (res)

# Đầu ra
12,5

res = chia (568,64)
in (res)

# Đầu ra
8,875
 

Mã này hoạt động tốt cho đến khi bạn thử chia cho 0:

  split (27,0)

 

Bạn thấy rằng chương trình gặp sự cố tạo ra ZeroDivisionError :

  # Output
-------------------------------------------------- -------------------------
ZeroDivisionError Traceback (lần gọi gần đây nhất)
& lt; ipython-input-19-932ea024ce43 & gt; trong & lt; mô-đun & gt; ()
---- & gt; 1 lần chia (27,0)

& lt; ipython-input-1-c98670fd7a12 & gt; trong số chia (num, div)
      1 lần chia def (num, div):
---- & gt; 2 trả về num / div

ZeroDivisionError: chia cho 0
 

Bạn có thể xử lý phép chia này cho số 0 như một ngoại lệ bằng cách thực hiện như sau:

  • Trong khối try , hãy đặt một gọi hàm split () . Về bản chất, bạn đang cố chia num cho div .
  • Xử lý trường hợp khi div 0 như một ngoại lệ bên trong khối ngoại trừ .
  • Trong ví dụ này, bạn có thể ngoại trừ ZeroDivisionError bằng cách in một thông báo cho người dùng biết rằng họ đã thử chia cho số không.

Điều này được hiển thị trong đoạn mã bên dưới:

  thử:
    res = chia (num, div)
    in (res)
ngoại trừ ZeroDivisionError:
    print ("Bạn đã cố gắng chia cho 0 :(")
 

Với đầu vào hợp lệ, mã vẫn hoạt động tốt.

  chia (10,2)
# Đầu ra
5.0
 

Khi bạn thử tìm hiểu về số 0, bạn sẽ được thông báo về trường hợp ngoại lệ xảy ra và chương trình sẽ kết thúc một cách duyên dáng.

  chia (10,0)
# Đầu ra
Bạn đã cố gắng chia cho không :(
 

Cách xử lý TypeError trong Python

Trong phần này, bạn sẽ thấy cách bạn có thể sử dụng thử ngoại trừ để xử lý TypeError trong Python.

▶ Hãy xem xét hàm sau add_10 () nhận một số làm đối số, thêm 10 vào nó và trả về kết quả của phép cộng này.

  def add_10 (num):
  return num + 10  

Bạn có thể gọi hàm add_10 () với bất kỳ số nào và nó sẽ hoạt động tốt, như hình dưới đây:

  result = add_10 (89)
in (kết quả)

#Output
99  

Bây giờ hãy thử gọi add_10 () bằng "five" thay vì 5 .

  add_10 ("five")  

Bạn sẽ nhận thấy rằng chương trình của mình gặp sự cố với thông báo lỗi sau:

< pre> --------------------------------------------- ------------------------------
TypeError Traceback (cuộc gọi gần đây nhất)
& lt; ipython-input-15-9844e949c84e & gt; trong & lt; mô-đun & gt; ()
---- & gt; 1 add_10 ("năm")

& lt; ipython-input-13-2e506d74d919 & gt; trong add_10 (num)
1 def add_10 (num):
---- & gt; 2 trả về số + 10

TypeError: chỉ có thể nối str (không phải "int") với str

Thông báo lỗi TypeError: chỉ có thể nối str (không phải "int") với str giải thích mà bạn chỉ có thể nối hai chuỗi và không thể thêm một số nguyên vào một chuỗi.

Bây giờ, bạn có như sau:

  • Cho một số my_num , hãy thử gọi hàm add_10 () với my_num làm đối số. Nếu đối số thuộc loại hợp lệ, sẽ không có ngoại lệ
  • Nếu không, khối ngoại trừ tương ứng với TypeError sẽ được kích hoạt, thông báo cho người dùng rằng đối số thuộc loại không hợp lệ.

Điều này được giải thích bên dưới:

  my_num = "five"
thử:
  result = add_10 (my_num)
  in (kết quả)
ngoại trừ TypeError:
  print ("Đối số` num` phải là một số ")  

Vì bây giờ bạn đã xử lý TypeError như một ngoại lệ, bạn chỉ được thông báo rằng đối số thuộc loại không hợp lệ.

  Đối số `num` phải là một số  

Cách xử lý IndexError trong Python

Nếu bạn đã làm việc với danh sách Python hoặc bất kỳ danh sách Python nào có thể lặp lại trước đây, có thể bạn sẽ gặp phải IndexError .

Điều này là do thường khó theo dõi tất cả các thay đổi đối với các tệp lặp lại. Và bạn có thể đang cố truy cập một mục ở chỉ mục không hợp lệ.

▶ Trong ví dụ này, danh sách my_list có 4 mục. Các chỉ số hợp lệ là 0, 1, 2, 3 và -1, -2, -3, -4 nếu bạn sử dụng lập chỉ mục phủ định.

2 là hợp lệ chỉ mục, bạn thấy rằng mục tại chỉ mục 2 , là C ++ , được in ra:

  my_list = ["Python", "C", "C ++", "JavaScript"]
print (my_list [2])

#Output
C ++  

Nếu bạn thử truy cập một mục tại chỉ mục nằm ngoài phạm vi của chỉ số hợp lệ, bạn sẽ gặp phải IndexError :

  print (my_list [4])  
 ----------------------------------------------- ----------------------------
IndexError Traceback (lần gọi gần đây nhất)
& lt; ipython-input-7-437bc6501dea & gt; trong & lt; mô-đun & gt; ()
      1 my_list = ["Python", "C", "C ++", "JavaScript"]
---- & gt; 2 bản in (my_list [4])

IndexError: danh sách chỉ mục nằm ngoài phạm vi  

Nếu bạn đã quen với mẫu này, bây giờ bạn sẽ sử dụng thử ngoại trừ để xử lý lỗi chỉ mục.

▶ Trong đoạn mã bên dưới, bạn thử truy cập vào mục tại chỉ mục được chỉ định bởi search_idx .

  search_idx = 3
thử:
  print (my_list [search_idx])
ngoại trừ IndexError:
  print ("Xin lỗi, chỉ mục danh sách nằm ngoài phạm vi")  

Ở đây, search_idx ( 3 ) là một chỉ mục hợp lệ và mục tại chỉ mục cụ thể được in ra:

  JavaScript  

Nếu search_idx nằm ngoài phạm vi hợp lệ cho các chỉ mục, khối ngoại trừ bắt IndexError làm ngoại lệ và không còn thông báo lỗi dài nữa. 🙂

  search_idx = 4
thử:
  print (my_list [search_idx])
ngoại trừ IndexError:
  print ("Xin lỗi, chỉ mục danh sách nằm ngoài phạm vi")  

Đúng hơn, thông báo rằng search_idx nằm ngoài phạm vi chỉ số hợp lệ được hiển thị:

  Xin lỗi, chỉ mục danh sách nằm ngoài phạm vi  

Cách xử lý a KeyError trong Python

Bạn có thể gặp phải KeyError khi làm việc với từ điển Python

▶ Hãy xem xét ví dụ này khi bạn có từ điển my_dict .

  my_dict = {"key1": "value1", "key2": "value2", "key3" : "value3"}
search_key = "khóa không tồn tại"
print (my_dict [search_key])  
  • Từ điển my_dict có 3 cặp khóa-giá trị, "key1: value1" , "key2: value2" "key3: value3"
  • Bây giờ, bạn cố gắng truy cập vào từ điển và truy cập giá trị tương ứng với khóa "khóa không tồn tại" .

Như mong đợi, bạn sẽ nhận được KeyError :

  ----------------------------------------------- ----------------------------
KeyError Traceback (lần gọi gần đây nhất)
& lt; ipython-input-2-2a61d404be04 & gt; trong & lt; mô-đun & gt; ()
      1 my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}
      2 search_key = "khóa không tồn tại"
---- & gt; 3 my_dict [search_key]

KeyError: 'khóa không tồn tại'  

Bạn có thể xử lý KeyError theo cách gần giống như cách bạn xử lý IndexError .

  • Bạn có thể thử truy cập vào giá trị tương ứng với khóa được chỉ định bởi search_key .
  • Nếu search_key thực sự là một khóa hợp lệ, giá trị tương ứng được in ra.
  • Nếu bạn gặp trường hợp ngoại lệ do khóa không tồn tại, bạn sử dụng khối trừ để cho người dùng biết.

Điều này được giải thích trong đoạn mã bên dưới:

  thử:
  print (my_dict [search_key])
ngoại trừ KeyError:
  print ("Xin lỗi, đó không phải là khoá hợp lệ!")  
  Xin lỗi, đó không phải là khoá hợp lệ!  

▶ Nếu bạn muốn để cung cấp ngữ cảnh bổ sung, chẳng hạn như tên của khóa không hợp lệ, bạn cũng có thể làm điều đó. Có thể khóa bị sai chính tả khiến khóa không hợp lệ. Trong trường hợp này, việc cho người dùng biết khóa được sử dụng có thể sẽ giúp họ sửa lỗi chính tả.

Bạn có thể thực hiện việc này bằng cách lấy khóa không hợp lệ là & lt; error_msg & gt; và sử dụng nó trong thông báo được in khi ngoại lệ xảy ra:

  thử:
  print (my_dict [search_key])
ngoại trừ KeyError dưới dạng error_msg:
  print (f "Xin lỗi, {error_msg} không phải là khoá hợp lệ!")  

▶ Lưu ý rằng tên của khoá cũng được in ra như thế nào:

  Xin lỗi, 'khóa không tồn tại' không phải là khóa hợp lệ!  

Cách xử lý FileNotFoundError trong Python

Một lỗi phổ biến khác xảy ra khi làm việc với các tệp trong Python là FileNotFoundError .

▶ Trong ví dụ sau, bạn đang cố gắng mở tệp my_file.txt bằng cách chỉ định đường dẫn của nó đến hàm open () . Và bạn muốn đọc tệp và in ra nội dung của tệp.

Tuy nhiên, bạn vẫn chưa tạo tệp ở vị trí được chỉ định.

Nếu bạn thử chạy đoạn mã bên dưới, bạn sẽ nhận được FileNotFoundError :

  my_file = open ("/ content / sample_data / my_file.txt ")
content = my_file.read ()
in (nội dung)  
 ----------------------------------------------- ----------------------------
FileNotFoundError Traceback (lần gọi gần đây nhất)
& lt; ipython-input-4-4873cac1b11a & gt; trong & lt; mô-đun & gt; ()
---- & gt; 1 my_file = open ("my_file.txt")

FileNotFoundError: [Errno 2] Không có tệp hoặc thư mục nào như vậy: 'my_file.txt'  

Và sử dụng thử ngoại trừ , bạn có thể hãy làm như sau:

  • Thử mở tệp trong khối try .
  • Xử lý FileNotFoundError trong khối ngoại trừ bằng cách cho người dùng biết rằng họ đã cố gắng mở một tệp không tồn tại.
  • Nếu khối try thành công và tệp vẫn tồn tại , đọc và in ra nội dung của tệp.
  • Trong khối cuối cùng , hãy đóng tệp để không lãng phí tài nguyên. Nhớ lại cách tệp sẽ được đóng bất kể điều gì xảy ra trong các bước mở và đọc tệp.
  hãy thử:
  my_file = open ("/ content / sample_data / my_file.txt")
ngoại trừ FileNotFoundError:
  print (f "Xin lỗi, tệp không tồn tại")
khác:
  content = my_file.read ()
  in (nội dung)
cuối cùng:
  my_file.close ()  

Lưu ý cách bạn đã xử lý lỗi như một ngoại lệ và chương trình kết thúc hiển thị thông báo dưới đây một cách duyên dáng:

  Xin lỗi, tệp không tồn tại  

▶ Hãy xem xét trường hợp khối else được kích hoạt. Tệp my_file.txt hiện có ở đường dẫn được đề cập trước đó.

image-77

Và đây là nội dung của tệp my_file.txt chứa:

image-78

Bây giờ, việc chạy lại đoạn mã trước đó sẽ hoạt động như mong đợi.

Lần này, tệp my_file.txt hiện diện, khối else được kích hoạt và nội dung của nó được in ra, như hình dưới đây:

image-80

Tôi hy vọng điều này làm rõ cách bạn có thể xử lý các trường hợp ngoại lệ khi làm việc với tệp.

Kết luận

Trong hướng dẫn này, bạn đã biết cách sử dụng thử ngoại trừ sta các tements trong Python để xử lý các ngoại lệ.

Bạn đã viết mã các ví dụ để hiểu những loại ngoại lệ nào có thể xảy ra và cách bạn có thể sử dụng ngoại trừ để tìm các lỗi phổ biến nhất.

Hy vọng bạn thích hướng dẫn này . Chúc bạn viết mã vui vẻ! Cho đến lần sau 🙂


Xem thêm những thông tin liên quan đến chủ đề python làm thế nào để thử ngoại trừ công việc

Python try except

alt

  • Tác giả: george boole
  • Ngày đăng: 2013-09-11
  • Đánh giá: 4 ⭐ ( 8083 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Simple program is keyed in to demonstrate how
    this works.

Hướng dẫn đánh giá nhân viên sau thời gian thử việc

  • Tác giả: resources.base.vn
  • Đánh giá: 5 ⭐ ( 2246 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Kiến thức, kinh nghiệm, tài liệu quản trị doanh nghiệp cho kỷ nguyên số - 10000+ subscribers

Đây có phải là một cách thực hành tốt để sử dụng thử ngoại trừ trong Python không?

  • Tác giả: qastack.vn
  • Đánh giá: 5 ⭐ ( 5071 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] "Tôi không biết liệu nó có phải là không biết gì không, nhưng tôi không thích…

Thử việc có phải nộp thuế thu nhập cá nhân? Cách tính thuế TNCN thời gian thử việc

  • Tác giả: tinlaw.vn
  • Đánh giá: 4 ⭐ ( 3528 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lương thử việc có đóng thuế thu nhập cá nhân không? Nếu có, thuế thu nhập cá nhân giai đoạn thử việc tính như thế nào? Trong phạm vi bài viết này, công ty kế toán thuế TinLaw sẽ giải đáp chi tiết cho các câu hỏi trên.

Lỗi và xử lý ngoại lệ trong Python

  • Tác giả: kipalog.com
  • Đánh giá: 4 ⭐ ( 2223 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: (Ảnh) Hôm ni, mình học tiếp về bạn “Lỗi và ngoại lệ”, bài blog tiếp theo nằm trong series(Link), thuộc phần Python Tutorial nha. Ở bài này, mình ...

Python: Đánh giá hiệu quả Python với Pytest

  • Tác giả: v1study.com
  • Đánh giá: 5 ⭐ ( 8268 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Làm Quen Với UnitTest Trong Python

  • Tác giả: codelearn.io
  • Đánh giá: 5 ⭐ ( 9573 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Làm thế nào để đảm bảo việc tái cấu trúc code (code refactoring) không ảnh hưởng đến việc vận hành sản phẩm? Câu trả lời bắt đầu từ Unit-test.

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Câu lệnh if trong Python với nhiều điều kiện (và + hoặc) - và trong câu lệnh if python

By ads_php