Errors

When an error occurs in running a morpho program, an error message is displayed together with an explanation of where in the program that the error happened.

You can make your own custom errors using the Error class:

var myerr = Error("Tag", "A message")

Use the throw method to raise the error, interrupting execution unless the error is caught:

myerr.throw() 

or

myerr.throw("A custom message") 

You can also use the warning method to alert the user of a potential issue that doesn't need the program to be interrupted.

myerr.warning() 

Alloc

This error may occur when creating new objects or resizing them. It typically indicates that the computer is under memory pressure.

Intrnl

This error indicates an internal problem with morpho. Please contact the developers for support.

InvldOp

This error occurs when an operator like + or - is given operands that it doesn't understand. For example,

print "Hello" * "Goodbye" // Causes 'InvldOp'

causes this error because the multiplication operator doesn't know how to multiply strings.

If the operands are objects, this means that the objects don't provide a method for the requested operation, e.g. for

print object1 / object2

object1 would need to provide a div() method that can successfully handle object2.

CnctFld

This error occurs when concatenation of strings or other objects fails, typically because of low memory.

Uncallable

This error occurs when you try to call something that isn't a method or a function. Here, we initialize a variable with a string and call it:

var f = "Not a function"
f() // Causes 'Uncallable'

GlblRtrn

This error occurs when morpho encounters a return keyword outside of a function or method definition.

InstFail

This error occurs when morpho tried to create a new object, but something went wrong.

NotAnObj

This error occurs if you try to access a property of something that isn't an object:

var a = 1
a.size = 5

ObjLcksPrp

This error occurs if you try to access a property or method that hasn't been defined for an object:

var a = Object()
print a.pifflepaffle

or

print a.foo()

NoInit

This error can occur if you try to create a new object from a class that doesn't have an init method:

class Foo { }
var a = Foo(0.3)

Here, the argument to Foo causes the NoInit error because no init method is available to process it.

NotAnInst

This error occurs if you try to invoke a method on something that isn't an object:

var a = 4
print a.foo()

ClssLcksMthd

This error occurs if you try to invoke a method on a class that doesn't exist:

class Foo { }
print Foo.foo()

InvldArgs

This error occurs if you call a function with the wrong number of arguments:

fn f(x) { return x }
f(1,2)

NotIndxbl

This error occurs if you try to index something that isn't a collection:

var a = 0.3
print a[1]

IndxBnds

This error can occur when selecting an entry from a collection object (such as a list) if the index supplied is bigger than the number of entries:

var a = [1,2,3]
print a[10]

NonNmIndx

This error occurs if you try to index an array with a non-numerical index:

var a[2,2]
print a["foo","bar"]

ArrayDim

[tagarraydim]: # arraydim

This error occurs if you try to index an array with the wrong number of indices:

var a[2,2]
print a[1]

DbgQuit

This notification is generated after selecting Quit within the debugger. Execution of the program is halted and control returns to the user.

SymblUndf

This error occurs if you refer to something that has not been previously declared, for example trying to use a variable of call a function that doesn't exist. It's possible that the symbol is spelt incorrectly, or that the capitalization doesn't match the definition (morpho symbols are case-sensitive).

A common problem is to try to assign to a variable that hasn't yet been declared:

a = 5

To fix this, prefix with var:

var a = 5

MtrxIncmptbl

This error occurs when an arithmetic operation is performed on two 'incompatible' matrices. For example, two matrices must have the same dimensions, i.e. the same number of rows and columns, to be added or subtracted,

var a = Matrix([[1,2],[3,4]])
var b = Matrix([[1]])
print a+b // generates a `MtrxIncmptbl` error.

Or to be multiplied together, the number of columns of the left hand matrix must equal the number of rows of the right hand matrix.

var a = Matrix([[1,2],[3,4]])
var b = Matrix([1,2])
print a*b // ok
print b*a // generates a `MtrxIncmptbl` error.