Класс Python выполняет R-функции через rpy2, и я хотел бы иметь возможность захватить трассировку из R в том случае, если функция R генерирует ошибку.Захват трассировки из R при поднятии RRuntimeError
R-код устарел, поэтому его изменение было бы очень рискованным; Я бы предпочел сделать что-то на стороне Python.
Вот что код Python выглядит в настоящее время:
from rpy2.rinterface import RRuntimeError
from rpy2.robjects import DataFrame
from rpy2.robjects.packages import InstalledPackage
class RAdapter(BaseRAdapter):
_module = None # type: InstalledPackage
def call_raw(self, function_name, *args, **kwargs):
# type: (str, tuple, dict) -> DataFrame
"""
Invokes an R function and returns the result as a DataFrame.
"""
try:
return getattr(self._module, function_name)(*args, **kwargs)
except RRuntimeError as e:
# :todo: Capture traceback from R and attach to `e`.
e.context = {'r_traceback': '???'}
raise
...
Как я должен изменить call_raw
так, что она захватывает отслеживающий из R в том случае, если функция R вызывает ошибку?
Спасибо за разъяснения! Я зарегистрировал [проблему на rpy2 repo] (https://bitbucket.org/rpy2/rpy2/issues/380/valueerror-when-getting-repr-of-a-pairlist) для последующего наблюдения. – user5568265