Hướng dẫn lỗi trong python

Hướng dẫn lỗi trong python

Tìm hiểu về lỗi cú pháp trong Python

Tìm hiểu về lỗi trong Python 

Có hai loại lỗi có thể xảy ra trong Python

Lỗi cú pháp

Lỗi cú pháp có thể được phát hiện trước khi chương trình của bạn được bắt đầu. Đây thường là lỗi dễ phát hiện nhất, lỗi cú pháp xảy ra khi bạn mắc lỗi chính tả hoặc lỗi đánh máy. Một lỗi có thể xảy ra khi bạn quên kết thúc câu lệnh if bằng các sử dụng dấu chấm phẩy hoặc viết nhầm while thay vì while. Lỗi cú pháp thường xuất hiện vào thời điểm bạn biên dịch chương trình và sẽ được thông báo bởi trình biên dịch. Dưới đây là ví dụ về lỗi cú pháp:

x = int(input('Enter a number: '))

whille x%2 == 0:

    print('You have entered an even number.')

else:

    print ('You have entered an odd number.')

Trong đoạn code phía trên, bạn sẽ thấy từ while bị gõ nhầm, nếu bạn cố gắng chạy chương trình trước khi sửa lỗi này, bạn sẽ gặp lỗi sau:

C:Python34Scripts>python error.py

  File "error.py", line 3

    whille x%2 == 0:

           ^

SyntaxError: invalid syntax

>>> Xem thêm: Cách chạy chương trình trong Python - Chạy tập lệnh trong Python

Lỗi logic

Lỗi logic trong python còn gọi là lỗi ngữ nghĩa, lỗi logic khiến chương trình hoạt động không chính xác, nhưng chúng thường không làm hỏng chương trình. Không giống như một chương trình có lỗi cú pháp, một chương trình có lỗi logic có thể được chạy, nhưng nó sẽ không hoạt động như cách bạn mong muốn. Cùng xem ví dụ sau về lỗi logic

x = float(input('Enter a number: '))

y = float(input('Enter a number: '))

z = x+y/2

print ('The average of the two numbers you have entered is:',z)

Ví dụ trên sẽ tính giá trị trung bình của hai số mà người dùng nhập vào. Tuy nhiên, do thứ tự của các phép toán trong số học (phép chia được tính trước khi cộng) nên khi chạy chương trình sẽ không đưa ra câu trả lời đúng:

>>> 

Enter a number: 3

Enter a number: 4

The average of the two numbers you have entered is: 5.0

>>>

Để khắc phục vấn đề này, chúng ta chỉ cần thêm dấu ngoặc đơn: z = (x + y) / 2 vào phép tính

Bây giờ chúng ta sẽ nhận được kết quả phù hợp như sau:

>>> 

Enter a number: 3

Enter a number: 4

The average of the two numbers you have entered is: 3.5

>>>

Hướng dẫn lỗi trong python

So sánh về lỗi cú pháp và lỗi logic trong Python

Các lỗi cú pháp chung trong Python

Khi bạn mắc lỗi trong Python lần đầu, sẽ rất hữu ích nếu bạn biết rõ lỗi đến từ đâu và cách khắc phục lỗi như thế nào. Trong phần dưới đây, bạn sẽ tìm hiểu sâu hơn về cách các lỗi trong Python xuất hiện và cách khắc phục chúng như sau:

Quá lạm dụng toán từ chuyển nhượng (=)

Trong Python, sẽ có một số trường hợp mà bạn không thể gán các đối tượng được, một ví dụ dưới đây là về chuỗi và hàm gọi như sau:

>>> len('hello') = 5

  File "", line 1

SyntaxError: can't assign to function call

>>> 'foo' = 1

  File "", line 1

SyntaxError: can't assign to literal

>>> 1 = 'foo'

  File "", line 1

SyntaxError: can't assign to literal

Trong ví dụ đầu, ta có thể thấy nó đang cố gán giá trị 5 cho hàm gọi len(). Thông báo lỗi rất hữu ích trong trường hợp này, nó cho thấy bạn không thể gán giá trị cho một hàm gọi. 

Ví dụ thứ hai và thứ 3 dưới đây đang cố gán một string với một số  nguyên cho các chuỗi. Quy tắc tương tự với giá trị của các chuỗi khác. Lần này, traceback sẽ chỉ ra vấn đề khi bạn cố gắng gán một giá trị cho một chuỗi.

Có thể mong muốn của bạn không phải là gán giá trị cho một lệnh gọi hàm hoặc chuỗi. Tuy nhiên, các lỗi trên vẫn xảy ra khi bạn quên mất dấu “=” khi thực hiện phép so sánh:

>>> len('hello') == 5

True 

Trong nhiều trường hợp, khi Python thông báo rằng bạn đang thực hiện một phép gán với một đối tượng không thể gán được. Điều đầu tiên bạn cần làm là kiểm tra xem câu lệnh là một lệnh gán hay một biểu thức Boolean.  Một trong những trường hợp mà bạn hay gặp vấn đề là khi cố gán giá trị với các từ khóa.

Lỗi chính tả, thiếu và sử dụng sai các từ khóa trong Python

Các keyword trong Python là một tập hợp các từ được bảo vệ và chúng có những ý nghĩa đặc biệt trong Python. Đây là những từ khóa mà bạn không thể sử dụng như biến, hàm. Chúng là một phần của ngôn ngữ và chỉ được sử dụng trong ngữ cảnh mà Python cho phép.

Có ba cách sử dụng nhầm từ khóa mà bạn hay gặp như sau:

- Viết sau từ khóa

- Viết thiếu từ khóa

- Sử dụng sai từ khóa

Nếu bạn viết sai chính tả một từ khóa trong Python, bạn sẽ nhận lỗi cú pháp SyntaxError ngay lập tức. Ví dụ về lỗi đánh nhầm key như sau: 

>>> fro i in range(10):

  File "", line 1

    fro i in range(10):

        ^

SyntaxError: invalid syntax

Ở đây bạn có thể thấy từ khóa for đã bị gõ nhầm thành fro. Do vậy, đoạn code trên sẽ gặp lỗi SyntaxError. Traceback sẽ chỉ ra nơi mà lỗi này xảy ra, và tùy vào đó, bạn có thể khắc phục nó. Những lỗi tương tự có thể được sửa lại một cách dễ dàng thông qua việc sửa lỗi chính tả. 

Lỗi thiếu từ khóa trong Python

>>> for i range(10):

  File "", line 1

    for i range(10):

              ^

SyntaxError: invalid syntax

Như ta có thể thấy, trong đoạn code trên, từ khóa in đã bị thiếu, traceback đã chỉ ra lỗi này và giúp cho bạn đi đúng hướng, Do vậy, bạn có thể sửa lại chương trình của mình khi nhận được thông báo.

Bên cạnh các lỗ như trên, bạn cũng có thể sử dụng sai các từ khóa được Python bảo vệ. Bạn cần nhớ rằng các keyword này chỉ được chỉ định trong một số trường hợp cụ ưu thể. Nếu bạn sử dụng sai bạn có thể nhận được lỗi cú pháp. Một ví dụ điển hình là việc sử dụng các lệnh như break và loop ngoài vòng lặp. Điều này có thể dễ dàng xảy ra.

>>> names = ['pam', 'jim', 'michael']

>>> if 'jim' in names:

...    print('jim found')

...    break

...

  File "", line 3

SyntaxError: 'break' outside loop

>>> if 'jim' in names:

...    print('jim found')

...    continue

...

  File "", line 3

SyntaxError: 'continue' not properly in loop

Ở đây, Python cho bạn biết chính xác lỗi sai diễn ra ở đâu. Các thông báo như “break” outside loop hay continue not properly in loop giúp bạn tìm ra chính xác những gì bạn cần sửa trong đoạn code của mình. Nếu đoạn code này nằm trong một tệp, Python cũng sẽ sử dụng traceback để chỉ ta các từ khóa bị lạm dụng sử dụng.

Một ví dụ khác là khi bạn cố gán từ khóa cho một biến hoặc sử dụng một từ khóa để xác định một hàm như sau: 

>>> pass = True

  File "", line 1

    pass = True

         ^

SyntaxError: invalid syntax

>>> def pass():

  File "", line 1

    def pass():

           ^

SyntaxError: invalid syntax

Nếu bạn thử gắn một giá trị cho pass hoặc khi bạn định nghĩa một hàm với tên pass, bạn sẽ gặp lỗi cú pháp và thông báo lỗi invalid syntax một lần nữa.

Trong trường hợp này, bạn sẽ có thể khó phát hiện lỗi hơn vì code của bạn trông đẹp và chỉn chu từ bên ngoài. Nếu bạn vẫn nhận được lỗi cú pháp, thì bạn nên cân nhắc việc kiểm tra tên biến hoặc tên hàm mà bạn muốn sử dụng.

Danh sách các từ khóa được bảo vệ sẽ được tùy chỉnh theo phiên bản của Python. 

>>> Tham khảo: Khóa học lập trình Python

Thiếu dấu ngoặc đơn, dấu ngoặc và dấu ngoặc kép

Thông thường, nguyên nhân cú pháp không hợp lệ trong lập trình Python là thiếu dấu ngoặc, ngoặc đơn và ngoặc kép. Những dấu này có thể rất khó phát hiện ở những dòng có ngoặc đơn lồng nhau hoặc các khối lệnh nhiều dòng. Tuy vậy, bạn vẫn có thể phát hiện ra những lỗi này nhờ vào sự giúp đỡ của traceback:

>>> message = 'don't'

  File "", line 1

    message = 'don't'

                                     ^

SyntaxError: invalid syntax

Ở đây, traceback sẽ chỉ ra lỗi code không hợp lệ và  bạn có thể fix lỗi này bằng hai cách như sau:

- Bao quanh string với cặp dấu nháy kép ("don't") và đừng quên đóng string

- Thêm ký tự thoát \ trước dấu nháy đơn thứ hai ('don\'t')

Kết luận: Việc xác định cú pháp không hợp lệ hay lỗi trong Python là việc mà bất kỳ lập trình viên nào cũng phải làm khi lập trình. Bài viết trên đã chỉ ra một số lỗi cú pháp không xác định trong Python kèm các ví dụ cụ thể. Qua bài viết này, bạn có thể xác định các lỗi cũng như tìm cách khắc phục chúng một cách nhanh chóng.

Nguồn: RealPython, Geek University