lib/pycall/pyerror.rb in pycall-0.1.0.alpha.20170309 vs lib/pycall/pyerror.rb in pycall-0.1.0.alpha.20170311

- old
+ new

@@ -5,13 +5,13 @@ ptype = ptrs + 0 * ptrs.type_size pvalue = ptrs + 1 * ptrs.type_size ptraceback = ptrs + 2 * ptrs.type_size LibPython.PyErr_Fetch(ptype, pvalue, ptraceback) LibPython.PyErr_NormalizeException(ptype, pvalue, ptraceback) - type = Conversions.to_ruby(LibPython::PyObjectStruct.new(ptype.read(:pointer))) - value = Conversions.to_ruby(LibPython::PyObjectStruct.new(pvalue.read(:pointer))) - traceback = Conversions.to_ruby(LibPython::PyObjectStruct.new(ptraceback.read(:pointer))) + type = Conversions.to_ruby(ptype.read(:pointer)) + value = Conversions.to_ruby(pvalue.read(:pointer)) + traceback = Conversions.to_ruby(ptraceback.read(:pointer)) new(type, value, traceback) end def initialize(type, value, traceback) @type = type @@ -20,12 +20,12 @@ super("Error occurred in Python") end attr_reader :type, :value, :traceback - def message + def to_s "#{type}: #{value}".tap do |msg| - unless traceback.null? + unless traceback&.null? if (o = PyCall.format_traceback(traceback)) msg.concat("\n", *o) end end end