From mboxrd@z Thu Jan 1 00:00:00 1970 From: Karl Voit Subject: org-sbe: error when passing strings as parameters to/from Python blocks Date: Thu, 14 Mar 2019 10:26:29 +0100 Message-ID: <2019-03-14T09-43-42@devnull.Karl-Voit.at> Reply-To: Karl Voit Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([209.51.188.92]:33316) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h4Mfw-00043U-TE for emacs-orgmode@gnu.org; Thu, 14 Mar 2019 05:29:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h4MdO-0000II-80 for emacs-orgmode@gnu.org; Thu, 14 Mar 2019 05:26:43 -0400 Received: from [195.159.176.226] (port=48976 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h4MdN-0000G3-UL for emacs-orgmode@gnu.org; Thu, 14 Mar 2019 05:26:42 -0400 Received: from list by blaine.gmane.org with local (Exim 4.89) (envelope-from ) id 1h4MdK-000TNn-RD for emacs-orgmode@gnu.org; Thu, 14 Mar 2019 10:26:38 +0100 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org Hi! I want to test/use Python with org-sbe: #+NAME: classificationfm #+BEGIN_SRC python :exports none :var prob :var impact result = "" if prob == 'high' and impact == 'high': return 'A' if prob == 'low' and impact == 'high': return 'B' if prob == 'high' and impact == 'low': return 'C' if prob == 'low' and impact == 'low': return 'D' return 'undefined' #+END_SRC (Yes, I should move to elif and the Python code might be coded with less characters in general: this should not be the point here ;-) ) | prob | impact | class | |------+--------+--------| | high | high | #ERROR | | low | high | #ERROR | | high | low | #ERROR | | low | low | #ERROR | #+TBLFM: @2$3..@>$3='(org-sbe "classificationfm" (prob $1) (impact $2)) I'd expect to get the values of the "class" table column: A, B, C, D instead of #ERROR. Reading the manual, I found: | NOTE: By default, string variable names are interpreted as | references to source-code blocks, to force interpretation of a | cell’s value as a string, prefix the identifier a "$" (e.g.,"$$2" | instead of "$2" or "$@2$2" instead of "@2$2"). Therefore, I tried the following lines ... #+TBLFM: @2$3..@>$3='(org-sbe "classificationfm" (prob "$1") (impact "$2")) #+TBLFM: @2$3..@>$3='(org-sbe "classificationfm" (prob $$1) (impact $$2)) #+TBLFM: @2$3..@>$3='(org-sbe "classificationfm" (prob "$$1") (impact "$$2")) ... all with same error in the result. My setup: Org mode version 9.1.6 on GNU Emacs 26.0.90 and GNU Emacs 25.1.1 I started a reddit thread[1]. In this thread, somebody was posting this table showing the error: #+NAME: myfunc #+BEGIN_SRC python :var n="1" return "ok" #+END_SRC | 10.3 | 9 | -18 | a | 14 | 11 | 1 | | ok | ok | ok | #ERROR | ok | ok | ok | #+TBLFM: @2='(org-sbe myfunc (n @1)) However, using the comment from the manual about strings, I prepended the reference with "$" ... | 10.3 | 9 | -18 | a | 14 | 11 | 1 | | ok | ok | ok | ok | ok | ok | ok | #+TBLFM: @2='(org-sbe mytestfunc (n $@1)) ... which now looks OK ;-) So, back to the initial situation: what is my error or do we have a bug in Org? [1] https://www.reddit.com/r/orgmode/comments/b0ll1v/embedding_python_code_in_table_formula/ -- get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode: > get Memacs from https://github.com/novoid/Memacs < Personal Information Management > http://Karl-Voit.at/tags/pim/ Emacs-related > http://Karl-Voit.at/tags/emacs/