Autodesk / Autodesk/AutomaticComponentToolkit

Python binding: Avoid using globals in Base.__del__()

Open
#226 5 comments 3 reactions 3 assignees Claimed by @martinweismann View on GitHub
Dominant language
Go
Stars
53
Forks
26
PR merge metrics
No merged PRs in 30d

Description

Running 'build123d' examples I saw errors like
```
Exception ignored in:
Traceback (most recent call last):
File "venv/lib/python3.13/site-packages/lib3mf/Lib3MF.py", line 57, in __del__
File "venv/lib/python3.13/site-packages/lib3mf/Lib3MF.py", line 6832, in Release
File "venv/lib/python3.13/site-packages/lib3mf/Lib3MF.py", line 6767, in checkError
AttributeError: 'NoneType' object has no attribute 'SUCCESS'
```
This is error from the "lib3mf" package, and the by "AutomaticComponentToolkit" generated file `lib3mf/Autogenerated/Bindings/Python/Lib3MF.py`.
```
This file has been generated by the Automatic Component Toolkit (ACT) version 1.8.0-alpha.
```
This seems to happen in some situations when the Python script terminates. The error message is most likely harmless, but it is confusing as a user to see this error message and not knowing if things went ok or not.

Looking at the code, the class Base `__del__()` method calls `_wrapper.Release() `that calls `checkError().` The problem seems to be that when Python cleans up, it might remove the class `ErrorCodes` before it try remove the class `Base`, i.e. `ErrorCodes` is no longer defined. This is likely what gives the error above. This problem is documented at

https://docs.python.org/3.9/reference/datamodel.html#object.__del__

Could the solution be to change the `__del__()` call to an `__exit__()` call ? It makes the error message go away but I don't know if it is the right thing to do.

As this happens when terminating, another solution might be to replace the line
```
if errorCode != ErrorCodes.SUCCESS.value:
```
with
```
if ErrorCodes and errorCode != ErrorCodes.SUCCESS.value:
```
This feels more like a hack and I haven't tested this.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.