-
Notifications
You must be signed in to change notification settings - Fork 96
Closed
Labels
Description
- What versions are you using?
database: 21 XE
platform.platform: macOS-14.6.1-arm64-arm-64bit
sys.maxsize > 2**32: True
platform.python_version: 3.12.4
oracledb.version: 2.4.1
- Is it an error or a hang or a crash?
An exception happens when I access certain attributes in the constructor of a Connection subclass before calling the base class' __init__.
- What error(s) or behavior you are seeing?
The following Python code:
import oracledb
class C(oracledb.Connection):
def __init__(self, *args, **kwargs):
self.outputtypehandler = None
super().__init__(self, *args, **kwargs)
db = C("user/pwd@db")results in the following output:
Traceback (most recent call last):
File "/Users/walter/checkouts/LivingLogic.Python.xist/oracledb_issue.py", line 9, in <module>
db = C("user/pwd@db")
^^^^^^^^^^^^^^^^
File "/Users/walter/checkouts/LivingLogic.Python.xist/oracledb_issue.py", line 5, in __init__
self.outputtypehandler = None
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/walter/pyvenvs/default/lib/python3.12/site-packages/oracledb/connection.py", line 376, in outputtypehandler
self._verify_connected()
File "/Users/walter/pyvenvs/default/lib/python3.12/site-packages/oracledb/connection.py", line 85, in _verify_connected
if self._impl is None:
^^^^^^^^^^
AttributeError: 'C' object has no attribute '_impl'
Exception ignored in: <function Connection.__del__ at 0x106208cc0>
Traceback (most recent call last):
File "/Users/walter/pyvenvs/default/lib/python3.12/site-packages/oracledb/connection.py", line 568, in __del__
if self._impl is not None:
^^^^^^^^^^
AttributeError: 'C' object has no attribute '_impl'
I realize that this is probably a borderline use and a fix for the code is simple: Move setting the outputtypehandler attribute after the call to the base class' __init__. However the stacktrace (and the fact, that a second exception happens in __del__) suggests that oracledb's code seems to be unprepared for such cases, so it might be good to look into that problem nonetheless.
- Does your application call init_oracle_client()?
No.
- Include a runnable Python script that shows the problem.
See above.