Một số nền: Tôi làm việc trong ngân hàng lớn và tôi đang cố gắng sử dụng lại một số mô-đun Python mà tôi không thể thay đổi, chỉ nhập. Tôi cũng không có tùy chọn cài đặt bất kỳ tiện ích/chức năng mới nào vv (chạy Python 2.6 trên Linux).Python thiếu phương thức __exit__
Tôi đã có này có mặt tại địa chỉ:
Trong mô-đun của tôi:
from common.databaseHelper import BacktestingDatabaseHelper
class mfReportProcess(testingResource):
def __init__(self):
self.db = BacktestingDatabaseHelper.fromConfig('db_name')
Một trong những phương pháp được gọi là trong lớp 'testingResource' có này:
with self.db as handler:
rơi với điều này:
with self.db as handler:
AttributeError: 'BacktestingDatabaseHelper' object has no attribute '__exit__'
và, thực sự, không có phương pháp __exit__
trong lớp 'BacktestingDatabaseHelper', một lớp mà tôi không thể thay đổi.
Tuy nhiên, mã này tôi đang cố gắng sử dụng lại hoạt động hoàn hảo cho các ứng dụng khác - có ai biết tại sao tôi gặp lỗi này và không ai khác không? Có cách nào để xác định __exit__
tại địa phương không?
Rất cám ơn trước.
Edited thêm:
Tôi đã cố gắng để thêm class của riêng tôi thiết lập truy cập DB nhưng không thể lấy nó để làm việc - thêm này để mô-đun của tôi:
class myDB(BacktestingDatabaseHelper):
def __enter__(self):
self.db = fromConfig('db_name')
def __exit__(self):
self.db.close()
và nói thêm:
self.db = myDB
vào tôi init thuộc tính cho lớp học chính của tôi, nhưng tôi nhận được lỗi này:
with self.db as handler:
TypeError: unbound method __enter__() must be called with myDB instance as first argument (got nothing instead)
Bất kỳ đề xuất nào về cách thực hiện điều này đúng cách?
Họ đang sử dụng phiên bản khác của mô-đun hoặc họ không sử dụng 'BacktestingDatabaseHelper' làm người quản lý ngữ cảnh –
Bạn sẽ phải biết thực '__enter__' và' __exit__' làm, và làm tương tự. Nếu cùng một mã hoạt động cho những người khác trong công ty của bạn, tôi thực sự khuyên bạn nên kiểm tra phiên bản và nội dung của từng mô-đun chung. –