How to disable logged warnings in Pybel?

1.3k views Asked by At

I am using Pybel - a Python wrapper around the OpenBabel API, and I am trying to disable warnings such as these:

==============================
*** Open Babel Warning  in ParseComplex
  Illegal aromatic element b-

My warnings were raised consistently when fingerprinting molecule SMILES fetched from ChEMBL

3

There are 3 answers

0
The Aelfinn On

You can obtain a handle to the openbabel logger (the class OBMessageHandler) off of the openbabel module. The trick is to first access the openbabel module off of the pybel module, grab the OBMessageHandler class, and instantiate the logger (docs):

import pybel

ob_log_handler = pybel.ob.OBMessageHandler()

Using the handle, you can set the log_level to 0 to disable all but critical messages (docs):

ob_log_handler.SetOutputLevel(0)

You can use the following enumerations (docs here) to choose your level of logging. The default is 1, which logs all warnings:

  • 0: Critical
  • 1: Warning (default)
  • 2: Info
  • 3: Audit (when molecules are destroyed/perceived)
  • 4: Debug
0
dkoes On

If you want to get rid of all error messages:

pybel.ob.obErrorLog.StopLogging()
0
hyperparam On

The Aelfinn's answer didn't work for me, but accessing SetOutputLevel this way did:

pybel.ob.obErrorLog.SetOutputLevel(0)