JuliaPy / JuliaPy/PyCall.jl

python stack frames not initialized (inspect.currentframe() fails)

Offen
#71 10 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Julia
Sterne
1.5k
Forks
186
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I was trying to use `PyCall` to import `ggplot` from https://github.com/yhat/ggplot/

The `qplot` function works fine.

```
ggplot.qplot([1,2],[3,4])
```

However, I can never get the `ggplot` function working. Specially, I can never create the `aes` class

```
julia> using PyCall

julia> @pyimport ggplot

julia> ggplot.aes
PyObject

julia> ggplot.aes(x="x",y="y")
ERROR: type: apply: expected Function, got PyObject

julia> pycall(ggplot.aes, PyObject, x="x",y="y")
ERROR: PyError (PyObject_Call)
AttributeError("'NoneType' object has no attribute 'f_locals'",)
File "/Users/Randy/.pyenv/versions/2.7.6/Python.framework/Versions/2.7/lib/python2.7/site-packages/ggplot/components/aes.py", line 68, in __init__
self.__eval_env__ = EvalEnvironment.capture(1)
File "/Users/Randy/.pyenv/versions/2.7.6/Python.framework/Versions/2.7/lib/python2.7/site-packages/patsy/eval.py", line 179, in capture
return cls([frame.f_locals, frame.f_globals],

in pyerr_check at /Users/Randy/.julia/v0.3/PyCall/src/exception.jl:58
in pycall at /Users/Randy/.julia/v0.3/PyCall/src/PyCall.jl:85
```

It seems that `ggplot` is calling `patsy` and checking some stack frame stuff.

---

Further study reveals that the root of the error is `.../patsy/eval.py` line 179

```
frame = inspect.currentframe()
try:
for i in xrange(depth + 1):
if frame is None:
raise ValueError, "call-stack is not that deep!"
frame = frame.f_back
return cls([frame.f_locals, frame.f_globals],
frame.f_code.co_flags & _ALL_FUTURE_FLAGS)
```

I have no idea what happens here...

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.