Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Generic virtual method in baseclass causes InvalidProgramException #1776

Closed
Labels
@rmadsen-ks

Description

@rmadsen-ks

Environment

  • Pythonnet version: 3.0.0-preview2022-04-11
  • Python version: 3.10
  • Operating System: MacOS and Ubuntu 2021.4
  • .NET Runtime: .net 6

Details

If I create a python class which inherits from a C# class that has a virtual generic method and exception is thrown while the class is being defined. Note, not during object instanciation time.

To reproduce, take the following C# class:

publicabstractclassGenericVirtualMethodTest{publicvirtualQVirtMethod<Q>(Qarg1){returnarg1;}}

Then inherit from it as in this test:

deftest_virtual_generic_method():classOverloadingSubclass(GenericVirtualMethodTest):__namespace__="test_virtual_generic_method_cls"obj=OverloadingSubclass()assertobj.VirtMethod[int](5)==5

The result is the following exception (Actually a C# exception inside a python exception inside a C# exception):

Python.Runtime.PythonException : An attempt was made to load a program with an incorrect format. (0x8007000B)  File "/Users/bruger/code/work/pythonnet/src/../tests/test_subclass.py", line 268, in test_virtual_generic_method    class OverloadingSubclass(GenericVirtualMethodTest):  File "<string>", line 19, in <module>   at Python.Runtime.PythonException.ThrowLastAsClrException() in /Users/bruger/code/work/pythonnet/src/runtime/PythonException.cs:line 53   at Python.Runtime.PythonException.ThrowIfIsNull(NewReference& ob) in /Users/bruger/code/work/pythonnet/src/runtime/PythonException.cs:line 455   at Python.Runtime.PythonEngine.RunString(String code, BorrowedReference globals, BorrowedReference locals, RunFlagType flag) in /Users/bruger/code/work/pythonnet/src/runtime/PythonEngine.cs:line 625   at Python.Runtime.PythonEngine.Exec(String code, PyDict globals, PyObject locals) in /Users/bruger/code/work/pythonnet/src/runtime/PythonEngine.cs:line 530   at Python.PythonTestsRunner.PythonTestRunner.RunPythonTest(String testFile, String testName) in /Users/bruger/code/work/pythonnet/src/python_tests_runner/PythonTestRunner.cs:line 64-----One or more child tests had errors  Exception doesn't have a stacktrace

Proposed Fix

I understand that it is probably a bit complicated to actually override a virtual generic method in python code and maybe it is not even necesary. So maybe the best solution is to just ignore virtual methods in this case.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp