Skip to content
This repository has been archived by the owner on Jul 24, 2023. It is now read-only.

Exception SystemError: '/builddir/build/BUILD/Python-2.7.5/Objects/classobject.c:521: bad argument to internal function' #117

Open
anye88 opened this issue Dec 31, 2021 · 0 comments

Comments

@anye88
Copy link

anye88 commented Dec 31, 2021

Hi, I have a problem and I need help !!!

When used python.PyInstance_New to instance my python script Class, if Class inherit other Class, then have bad error

Exception SystemError: '/builddir/build/BUILD/Python-2.7.5/Objects/classobject.c:521: bad argument to internal function'

my golang programmer

package main

import (
	"fmt"
	"github.com/sbinet/go-python"
	"os"
)

var PyStr = python.PyString_FromString

func init() {
	os.Setenv("PYTHONPATH", ".")
	fmt.Println("PYTHONPATH:", os.Getenv("PYTHONPATH"))
	err := python.Initialize()
	if err != nil {
		panic(err.Error())
	}
}

func import_and_use_obj() {
	// Import class from module
	objsModule := python.PyImport_ImportModule("objs")
	if objsModule == nil {
		panic("Error importing module: objs")
	}
	fmt.Printf("[MODULE REF] repr(objsModule) = %s\n", python.PyString_AS_STRING(objsModule.Repr()))

	obj := objsModule.GetAttrString("obj")
	if obj == nil {
		panic("[CLASS REF] Error importing object: obj")
	}
	fmt.Printf("[CLASS REF] repr(obj) = %s\n", python.PyString_AS_STRING(obj.Repr()))

	// Instantiate obj
	newObj := python.PyInstance_New(obj, python.PyTuple_New(0), nil)
	if newObj == nil {
		panic("[INSTANCE REF] Error instantiating object: obj")
	}
	fmt.Printf("[INSTANCE REF] repr(newObj) = %s\n", python.PyString_AS_STRING(newObj.Repr()))
}

func main() {
	err := python.Initialize()
	if err != nil {
		panic(err.Error())
	}
	defer python.Finalize()
	import_and_use_obj()
	python.Finalize()
}

my python script

#!/usr/bin/env python2
import pickle
import json

class MyObj(object):
    def __init__(self):
        self.name = "ABC"


class obj(MyObj):
    def __init__(self): pass

    def obj_method(self):
        print("Python object method called!")
        return 1

    def obj_method_arg(self, arg1):
        print("Python object method called, with argument: %s" % arg1)
        return 1

    def obj_method_args(self, arg1, arg2):
        print("Python object method called with arguments: %s" % arg1, arg2)
        return 1

    def obj_method_kwargs(self, **kwargs):
        print("Python object method called with arguments:" )
        print(kwargs)
        return 1

Error

[root@localhost demo]# go run application/demo1/main.go 
PYTHONPATH: .
[MODULE REF] repr(objsModule) = <module 'objs' from '/root/demo/objs.py'>
[CLASS REF] repr(obj) = <class 'objs.obj'>
Exception SystemError: '/builddir/build/BUILD/Python-2.7.5/Objects/classobject.c:521: bad argument to internal function' in <module 'threading' from '/usr/lib64/python2.7/threading.pyc'> ignored
panic: [INSTANCE REF] Error instantiating object: obj

goroutine 1 [running]:
main.import_and_use_obj()
        /root/demo/application/demo1/main.go:37 +0x195
main.main()
        /root/demo/application/demo1/main.go:48 +0x49
exit status 2
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant