Invalid syntax python la gì
Mục lục bài viết:
Show
Python được biết đến với cú pháp đơn giản. Tuy nhiên, khi bạn học Python lần đầu tiên hoặc khi bạn đã làm quen với Python với nền tảng vững chắc về một ngôn ngữ lập trình khác, bạn có thể gặp phải một số điều mà Python không cho phép. Nếu bạn đã từng nhận được Đến cuối hướng dẫn này, bạn sẽ có thể:
Cú pháp không hợp lệ trong PythonKhi bạn chạy mã Python của mình, trình thông dịch trước tiên sẽ phân tích cú pháp nó để chuyển nó thành mã byte Python, mã này sau đó sẽ thực thi. Trình thông dịch sẽ tìm thấy bất kỳ cú pháp không hợp lệ nào trong Python trong giai đoạn đầu tiên của quá trình thực thi chương trình, còn được gọi là giai đoạn phân tích cú pháp . Nếu trình thông dịch không thể phân tích cú pháp mã Python của bạn thành công, thì điều này có nghĩa là bạn đã sử dụng cú pháp không hợp lệ ở đâu đó trong mã của mình. Thông dịch viên sẽ cố gắng cho bạn biết lỗi đó xảy ra ở đâu. Khi bạn học Python lần đầu tiên, có thể khó chịu khi nhận được một Lưu ý: Nếu mã của bạn đúng về mặt cú pháp , thì bạn có thể nhận được các ngoại lệ khác không
phải là a Bạn không thể xử lý cú pháp không hợp lệ trong Python như các trường hợp ngoại lệ khác. Ngay cả khi bạn đã cố gắng bọc một SyntaxError Exception và TracebackKhi trình thông dịch gặp cú pháp không hợp lệ trong mã Python, nó sẽ đưa ra một
Bạn có thể thấy cú pháp không hợp lệ trong từ điển theo
nghĩa đen ở dòng 4. Mục nhập thứ hai
Lưu ý rằng thông báo tìm lại lỗi định vị lỗi ở dòng 5, không phải dòng 4. Trình thông dịch Python đang cố gắng chỉ ra đâu là cú pháp không hợp lệ. Tuy nhiên, nó chỉ có thể thực sự chỉ ra nơi đầu tiên nó nhận thấy một vấn đề. Khi bạn nhận được một truy xuất Trong ví dụ trên, không có vấn đề gì với việc bỏ dấu phẩy, tùy thuộc vào điều gì đứng sau dấu phẩy. Ví dụ, không có vấn đề gì với việc thiếu dấu phẩy sau Có một số yếu tố của truy xuất nguồn gốc
Trong ví dụ trên, tên tệp đã cho là Có hai trường hợp ngoại lệ khác mà bạn có thể thấy Python tăng lên. Chúng tương đương với
Cả hai ngoại lệ này đều kế thừa từ Các vấn đề về cú pháp thường gặpKhi bạn gặp phải Lạm dụng Toán tử Chuyển nhượng ( =)Có một số trường hợp trong Python mà bạn không thể gán các đối tượng. Một số ví dụ đang gán cho các chữ và lời gọi hàm. Trong khối mã bên dưới, bạn có thể thấy một vài ví dụ cố gắng thực hiện việc này và kết quả truy xuất >>>
Ví dụ đầu tiên cố gắng gán
giá trị Ví dụ thứ hai và thứ ba cố gắng gán một chuỗi và một số nguyên cho các ký tự. Quy tắc tương tự cũng đúng với các giá trị chữ khác. Một lần nữa, các thông báo theo dõi lại chỉ ra rằng sự cố xảy ra khi bạn cố gắng gán giá trị cho một ký tự. Lưu ý: Các ví dụ trên thiếu dòng mã lặp lại và dấu mũ ( Có thể ý định của bạn không phải là gán một giá trị cho một lệnh gọi
theo nghĩa đen hoặc hàm. Ví dụ: điều này có thể xảy ra nếu bạn vô tình bỏ qua dấu bằng phụ ( >>>
Hầu hết thời gian, khi Python nói với bạn rằng bạn đang thực hiện một nhiệm vụ cho một thứ gì đó không thể được giao, trước tiên bạn có thể muốn kiểm tra để đảm bảo rằng thay vào đó câu lệnh không phải là biểu thức Boolean . Bạn cũng có thể gặp phải vấn đề này khi bạn đang cố gắng chỉ định một giá trị cho một từ khóa Python , bạn sẽ đề cập đến vấn đề này trong phần tiếp theo. Từ khóa Python sai chính tả, thiếu hoặc sử dụng saiTừ khóa Python là một tập hợp các từ được bảo vệ có ý nghĩa đặc biệt trong Python. Đây là những từ bạn không thể sử dụng làm số nhận dạng, biến hoặc tên hàm trong mã của mình. Chúng là một phần của ngôn ngữ và chỉ có thể được sử dụng trong ngữ cảnh mà Python cho phép. Có ba cách phổ biến mà bạn có thể sử dụng nhầm từ khóa:
Nếu bạn viết sai chính
tả một từ khóa trong mã Python của mình, thì bạn sẽ nhận được >>>
Tin nhắn đã đọc Một vấn đề phổ biến khác với các từ khóa là khi bạn bỏ lỡ chúng hoàn toàn: >>>
Một lần nữa, thông báo ngoại lệ không phải là hữu ích, nhưng theo dõi lại cố gắng chỉ cho bạn đi đúng hướng. Nếu bạn di chuyển trở lại từ dấu mũ, thì bạn có thể thấy rằng Bạn cũng có
thể sử dụng sai một từ khóa Python được bảo vệ. Hãy nhớ rằng, từ khóa chỉ được phép sử dụng trong những trường hợp cụ thể. Nếu bạn sử dụng chúng không chính xác, thì bạn sẽ có cú pháp không hợp lệ trong mã Python của mình. Một ví dụ phổ biến về điều này là việc sử dụng >>>
Ở đây, Python thực hiện rất tốt việc cho bạn biết chính xác điều gì sai. Các thông báo Một ví dụ khác là nếu bạn cố gắng gán một từ khóa Python cho một biến hoặc sử dụng một từ khóa để xác định một hàm : >>>
Khi bạn cố gắng gán một giá trị cho Có thể khó hơn một chút để giải quyết loại cú pháp không hợp lệ này trong mã Python vì mã trông đẹp từ bên ngoài. Nếu mã của bạn trông ổn, nhưng bạn vẫn nhận được Danh sách các từ khóa được bảo vệ đã thay đổi với mỗi phiên bản Python mới. Ví dụ: trong Python
3.6, bạn có thể sử dụng Một ví dụ khác về điều này là
Bạn có thể chạy đoạn mã sau để xem danh sách các từ khóa trong bất kỳ phiên bản Python nào bạn đang chạy:
>>>
Mã này sẽ nhanh chóng cho bạn biết liệu số nhận dạng mà bạn đang cố gắng sử dụng có phải là từ khóa hay không. Thiếu dấu ngoặc đơn, dấu ngoặc đơn và dấu ngoặc képThông thường, nguyên nhân của cú pháp không hợp lệ trong mã Python là dấu ngoặc đơn, dấu ngoặc nhọn hoặc dấu ngoặc kép bị thiếu hoặc không khớp. Chúng có thể khó phát hiện trong các dòng dấu ngoặc đơn lồng nhau rất dài hoặc các khối nhiều dòng dài hơn. Bạn có thể phát hiện các dấu ngoặc kép không khớp hoặc bị thiếu với sự trợ giúp của tính năng theo dõi của Python: >>>
Ở đây, dấu vết trỏ đến mã không hợp lệ, nơi có một
Một lỗi phổ biến khác là quên đóng chuỗi. Với cả chuỗi được trích dẫn kép và được trích dẫn đơn, tình huống và truy xuất nguồn gốc đều giống nhau: >>>
Lần này, dấu mũ trong dấu vết trỏ ngay đến mã sự cố. Các Dấu ngoặc kép bị thiếu trong các câu lệnh bên trong chuỗi f cũng có thể dẫn đến cú pháp không hợp lệ trong Python:
Ở đây, tham chiếu đến
Python xác định vấn đề và cho bạn biết rằng nó tồn tại bên trong chuỗi f. Thông báo Điều này có thể không hữu ích bằng khi dấu mũ trỏ đến vùng có vấn đề của chuỗi f, nhưng nó sẽ thu hẹp nơi bạn cần tìm. Có một chuỗi chưa kết thúc ở đâu đó bên trong chuỗi f đó. Bạn chỉ cần tìm ra nơi. Để khắc phục sự cố này, hãy đảm bảo rằng tất cả các dấu ngoặc kép và dấu ngoặc kép f-string đều có mặt. Tình hình hầu hết giống nhau đối với dấu ngoặc đơn và dấu ngoặc đơn. Ví dụ: nếu bạn bỏ dấu ngoặc vuông đóng khỏi danh sách , thì Python sẽ phát hiện ra điều đó và chỉ ra. Tuy nhiên, có một vài biến thể của điều này. Đầu tiên là bỏ dấu ngoặc đóng khỏi danh sách:
Khi bạn chạy mã này, bạn sẽ được thông báo rằng có sự cố với lệnh gọi tới
Gì đang xảy ra ở đây là Python nghĩ danh sách
chứa ba yếu tố: Một biến thể khác là thêm dấu phẩy vào sau phần tử cuối cùng trong danh sách trong khi vẫn bỏ dấu ngoặc vuông đóng:
Bây giờ bạn nhận được một dấu vết khác:
Trong ví dụ trước, Trong ví dụ này, Python mong đợi một dấu ngoặc đóng ( Sai cú pháp từ điểnBạn đã thấy trước đó rằng bạn có thể nhận được >>>
Một lần nữa, thông báo lỗi này không hữu ích lắm. Tuy nhiên, dòng lặp lại và dấu mũ rất hữu ích! Họ đang chỉ thẳng vào nhân vật vấn đề. Loại sự cố này thường gặp nếu bạn nhầm lẫn cú pháp Python với cú pháp của các ngôn ngữ lập trình khác. Bạn cũng sẽ thấy điều này nếu bạn nhầm lẫn giữa hành động xác định từ điển với một >>>
Bạn có thể sử dụng Sử dụng thụt lề saiCó hai lớp
Trong khi các ngôn ngữ lập trình khác sử dụng dấu ngoặc nhọn để biểu thị các khối mã thì Python sử dụng khoảng trắng . Điều đó có nghĩa là Python mong đợi khoảng trắng trong mã của bạn hoạt động có thể đoán trước được. Nó sẽ tăng lên
Điều này có thể khó thấy, nhưng dòng 5 chỉ được
thụt vào 2 khoảng trắng. Nó phải phù hợp với Tuy nhiên, cũng có một chút mơ hồ ở đây. Là
Mặc dù theo
dõi trông rất giống theo dõi Loại Nếu kích thước tab của bạn có cùng chiều rộng với số khoảng trắng trong mỗi mức thụt lề, thì có thể giống như tất cả các dòng đều ở cùng một mức. Tuy nhiên, nếu một dòng được thụt lề bằng cách sử dụng dấu cách và dòng còn lại được thụt vào bằng các tab, thì Python sẽ chỉ ra đây là một vấn đề:
Ở đây, dòng 5 được thụt lề bằng một tab thay vì 4 dấu cách. Khối mã này có thể trông hoàn toàn ổn đối với bạn hoặc có thể trông hoàn toàn sai, tùy thuộc vào cài đặt hệ thống của bạn. Tuy nhiên, Python sẽ nhận thấy vấn đề ngay lập tức. Nhưng trước khi bạn chạy mã để xem điều gì Python sẽ cho bạn biết là sai, có thể hữu ích cho bạn khi xem ví dụ về mã trông như thế nào trong các cài đặt chiều rộng tab khác nhau:
Lưu ý sự khác biệt về hiển thị giữa ba ví dụ trên. Hầu hết mã sử dụng 4 dấu cách cho mỗi mức thụt lề, nhưng dòng 5 sử dụng một tab duy nhất trong cả ba ví dụ. Chiều rộng của tab thay đổi, dựa trên cài đặt chiều rộng tab :
Khi bạn chạy mã, bạn sẽ gặp lỗi sau và theo dõi lại:
Chú
ý Giải pháp cho điều này là làm cho tất cả các dòng trong cùng một tệp mã Python sử dụng tab hoặc dấu cách, nhưng không sử dụng cả hai. Đối với các khối mã ở trên, cách khắc phục sẽ là xóa tab và thay thế bằng 4 khoảng trắng, sẽ in Xác định và gọi các chức năngBạn có thể gặp phải cú pháp không hợp lệ trong Python khi bạn đang định nghĩa hoặc gọi các hàm. Ví dụ: bạn sẽ thấy >>>
Việc truy xuất ở đây rất hữu ích, với dấu mũ trỏ ngay đến ký tự vấn đề. Bạn có thể xóa cú pháp không hợp lệ này trong Python bằng cách chuyển dấu chấm phẩy cho dấu hai chấm. Ngoài ra, các đối số từ khóa trong cả định nghĩa hàm và lệnh gọi hàm cần phải theo đúng thứ tự. Đối số từ khóa luôn đứng sau đối số vị trí. Việc không sử dụng lệnh này sẽ dẫn đến >>>
Ở đây, một lần nữa, thông báo lỗi rất hữu ích trong việc cho bạn biết chính xác điều gì xảy ra với dòng. Thay đổi phiên bản PythonĐôi khi, mã hoạt động hoàn toàn tốt trong một phiên bản Python bị hỏng trong phiên bản mới hơn. Điều này là do những thay đổi chính thức trong cú pháp ngôn ngữ. Ví dụ nổi tiếng nhất về điều này là >>>
Đây là một trong những ví dụ trong đó thông báo lỗi được cung cấp cùng với Một vấn đề khác mà bạn có thể gặp phải là khi bạn đang đọc hoặc tìm hiểu về cú pháp là cú pháp hợp lệ trong phiên bản Python mới hơn, nhưng không hợp lệ trong phiên bản bạn đang viết. Một ví dụ về điều này là cú pháp f-string , không tồn tại trong các phiên bản Python trước 3.6: >>>
Trong các phiên bản Python trước 3.6, trình thông dịch không biết gì về cú pháp chuỗi f và sẽ chỉ cung cấp
một Cú pháp Python đang tiếp tục phát triển và có một số tính năng mới thú vị được giới thiệu trong Python 3.8 :
Nếu bạn muốn thử một số tính năng mới này, thì bạn cần
đảm bảo rằng bạn đang làm việc trong môi trường Python 3.8. Nếu không, bạn sẽ nhận được một Python 3.8 cũng cung cấp tính năng mới
>>>
Điều này Trong Python 3.8, mã này vẫn tăng >>>
Thông
báo hữu ích đi kèm với cái mới Phần kết luậnTrong hướng dẫn này, bạn đã thấy thông tin mà theo dõi Khi bạn đang viết mã, hãy cố gắng sử dụng IDE hiểu cú pháp Python và cung cấp phản hồi. Nếu bạn đặt nhiều ví dụ mã Python không hợp lệ từ hướng dẫn này vào một IDE tốt, thì chúng sẽ làm nổi bật các dòng vấn đề trước khi bạn thực thi mã của mình.
|