Autodesk / Autodesk/AutomaticComponentToolkit

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

オープン
#226 コメント 5 件 リアクション 3 件 担当者 3 名 @martinweismann が担当を希望しています GitHub で見る
主要言語
Go
スター
53
フォーク
26
PR マージ指標
30日以内にマージされた PR はありません

説明

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.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。