Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Lỗi Python TypeError: 'module' object is not callable - Giải pháp

Module Python gây nhầm lẫn, đặc biệt khi tự định nghĩa. "TypeError: 'module' object is not callable" là lỗi phổ biến nhất lập trình viên Python mắc khi làm việc với lớp (class).

Trong hướng dẫn này, nói về ý nghĩa lỗi và tại sao nó nêu lên. Chúng ta đi qua đoạn mã ví dụ giúp bạn khắc phục lỗi. Hãy bắt đầu!

Vấn đề: TypeError: 'module' object is not callable

Bất kỳ file Python nào là module miễn là kết thúc đuôi ".py".

Module là phần quan trọng Python vì cho phép định nghĩa hàm, biến, và lớp bên ngoài chương trình chính. Nghĩa là bạn chia mã thành nhiều file và phân loại hiệu quả hơn.

Module phải import theo cách cụ thể. Nếu không, Python báo lỗi:

TypeError: 'module' object is not callable

Điều này xảy ra khi bạn cố import module như hàm.

Tình huống ví dụ

Định nghĩa module "cakes". Module chứa một hàm: read_file. Hàm read_file đọc nội dung file text.

Tên file quyết định tên module. Vì muốn module "cakes", viết mã trong file cakes.py:

81% người tham gia cho biết họ cảm thấy tự tin hơn về cơ hội việc làm công nghệ sau khi tham gia bootcamp. Được ghép nối với bootcamp ngay hôm nay.

Sinh viên trung bình tốt nghiệp bootcamp mất chưa đến sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được việc đầu tiên.

def read_file(): all_cakes = [] with open("cakes.txt", "r") as cake_file: cake_list = cake_file.readlines() for c in cake_list: all_cakes.append(c.replace("\n", "")) return all_cakes

Hàm này đọc nội dung file "cakes.txt". Sau đó lặp qua mỗi dòng văn bản trong file và thêm mỗi dòng vào list "all_cakes".

Phương thức replace() dùng thay ký tự xuống dòng ("\n") bằng giá trị rỗng. Loại bỏ tất cả xuống dòng. Trả về "all_cakes" cuối hàm.

Bây giờ, mở file app.py và dán mã:

import cakes cake_list = cakes() print(cake_list)

Mã này dùng module "cakes" đọc nội dung file "cakes.txt". Sau đó in tất cả bánh hàm tìm thấy trong file.

Hãy chạy mã:

Traceback (most recent call last): File "main.py", line 3, in <module> cakes = cakes() TypeError: 'module' object is not callable

Mã trả về lỗi.

Giải pháp

Hãy xem câu lệnh import trong file app.py:

import cakes

Chúng ta import module "cakes". Chứa tất cả biến, lớp, hàm khai báo trong "cakes.py".

Bây giờ, xem dòng mã tiếp theo:

cake_list = cakes()

Mặc dù module "cakes" chỉ chứa một hàm, chúng ta không chỉ định hàm đó. Điều này làm nhầm lẫn Python vì không biết hàm nào nên làm việc.

Để khắc phục lỗi, gọi tên hàm muốn tham chiếu thay vì module:

import cakes cake_list = cakes.read_file() print(cake_list)

Hãy thử chạy mã lại:

['Cinnamon Babka', 'Chocolate Cupcake']

Mã trả về thành công danh sách bánh.

Trong file app.py, gọi cakes.read_file().

Python xem file "cakes.py" nơi module "cakes" lưu và tìm hàm read_file(). Sau đó, Python thực thi hàm đó.

Gán kết quả hàm read_file() cho biến "cake_list". Sau đó, in list ra console.

Thay vào đó, import hàm read_file trực tiếp vào chương trình:

from cakes import read_file cake_list = read_file() print(cake_list)

Mã trả về:

['Cinnamon Babka', 'Chocolate Cupcake']

Mã thực thi hàm read_file() từ module "cakes". Ví dụ này, import toàn bộ module "cakes". Thay vào đó, import một hàm từ module "cakes": read_file.

Chú ý khi import read_file, không cần dùng cakes.read_file() gọi hàm. Dùng read_file() vì import trực tiếp hàm read_file() vào mã.



Kết luận

Mã module Python tồn tại file khác. Có vài cách import hàm và giá trị từ module và dễ mắc lỡ.

Khi làm module, đảm bảo tham chiếu đúng hàm, lớp, biến muốn truy cập. Cần chỉ định chính xác hàm muốn gọi từ module nếu muốn tham chiếu hàm, thay vì gọi chính module.

Bây giờ bạn đã sẵn sàng giải quyết TypeError Python này như lập trình viên chuyên nghiệp!