# I get this error when executing a chunk of code I am debugging: AttributeError: 'com.inductiveautomation.ignition.designer.gui.tool' object has no attribute 'perspective'

**URL:** <https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254>\
**Category:** Ignition\
**Tags:** scripting, perspective\
**Created:** [August 6, 2024, 7:53pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254 "2024-08-06T19:53:13Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 7:53pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/1 "2024-08-06T19:53:13Z")

</div>

Does anybody know why this script would give me such an error? I am just using the print to confirm isError works.

```python
isError = system.date.toMillis(system.date.now())%2 # placeholder condition that checks even

system.perspective.print('isError: ' + str(isError))
# Trigger the message. For the message we need to create the Message Handler / Listener
if isError:
	system.perspective.sendMessage('showAlert',
		payload = {'timeout': 5, 
			'color': '#00FF00'},		
		scope = 'view')
else:
	system.perspective.sendMessage(
		'showAlert',
		payload = {
			'timeout': 5,
			'color': '#FF0000'
		},
		scope = 'view'
	)

```

If I remove that line it will give me the same error for line 11, do I need to install system.perspective as a library or something? I am using :

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/7/57c36411c13f23209da8314bd232fd94be2988f4.png)

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2024, 7:56pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/2 "2024-08-06T19:56:46Z")

</div>

I'm going to guess you are trying to run this in the designer's Script Console? That is Vision scope, not Perspective. You need to test with a script on an actual Perspective component.

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [August 6, 2024, 8:03pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/4 "2024-08-06T20:03:23Z")

</div>

In a perspective view, from a button, for example

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:05pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/6 "2024-08-06T20:05:21Z")

</div>

Thank you for your response! I am not sure I understand though. How do I do that? I am working on a Perspective project. I would assume I am on the Perspective Scope. Again, thanks for replying so fast.

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:06pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/7 "2024-08-06T20:06:19Z")

</div>

> [@dkhayes117](#):
>
> n a perspective view, from a button, for example

I have done that and it does not print anything on the console

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2024, 8:08pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/8 "2024-08-06T20:08:00Z")

</div>

Nope. The designer is a java application that originally worked only with Vision GUI functionality (because Perspective didn't exist). For complicated reasons, the designer script console simply cannot run Perspective code.

Perspective functionality is fundamentally gateway-scope, and therefore only Perspective components (inside the designers Chrome browser) will run it.

Make an actionPerformed event script on a button in your Perspective view. Place your test script there. Put your designer in preview mode and click the button.

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [August 6, 2024, 8:09pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/9 "2024-08-06T20:09:18Z")

</div>

Also look for the output in the _console_, (ctrl + shift + c), not the script console

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:13pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/10 "2024-08-06T20:13:23Z")

</div>

This is what I get when I do that:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/c/8/c80af82d971aaf6b9b32271924420159a0506721.png)  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/9/29736d77e669de5e0f05957ceb9f24df5f8f0aed.png)

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:15pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/11 "2024-08-06T20:15:25Z")

</div>

I tried that too but it does not give me more info than the error I get from the preview mode:

```python
16:16:05.908 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Unable to run action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: code could not be compiled.
com.inductiveautomation.ignition.common.GenericTransferrableException: SyntaxError: no viable alternative at input 'else' (<function:runAction>, line 19)
	at org.python.core.ParserFacade.fixParseError(ParserFacade.java:95)
	at org.python.core.ParserFacade.parse(ParserFacade.java:205)
	at org.python.core.Py.compile_flags(Py.java:2269)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:899)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunctionSuper(ProjectScriptLifecycle.java:825)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.getOrCreateDelegate(ProjectScriptLifecycle.java:941)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.<init>(ProjectScriptLifecycle.java:932)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunction(ProjectScriptLifecycle.java:805)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:882)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.lambda$invoke$0(ScriptFunctionHelper.java:115)
	at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:108)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
16:16:05.935 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Unable to run action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: code could not be compiled.
com.inductiveautomation.ignition.common.GenericTransferrableException: SyntaxError: no viable alternative at input 'else' (<function:runAction>, line 19)
	at org.python.core.ParserFacade.fixParseError(ParserFacade.java:95)
	at org.python.core.ParserFacade.parse(ParserFacade.java:205)
	at org.python.core.Py.compile_flags(Py.java:2269)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:899)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunctionSuper(ProjectScriptLifecycle.java:825)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.getOrCreateDelegate(ProjectScriptLifecycle.java:941)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.<init>(ProjectScriptLifecycle.java:932)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunction(ProjectScriptLifecycle.java:805)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:882)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.lambda$invoke$0(ScriptFunctionHelper.java:115)
	at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:108)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
16:16:05.939 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Unable to run action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: code could not be compiled.
com.inductiveautomation.ignition.common.GenericTransferrableException: SyntaxError: no viable alternative at input 'else' (<function:runAction>, line 19)
	at org.python.core.ParserFacade.fixParseError(ParserFacade.java:95)
	at org.python.core.ParserFacade.parse(ParserFacade.java:205)
	at org.python.core.Py.compile_flags(Py.java:2269)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:899)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunctionSuper(ProjectScriptLifecycle.java:825)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.getOrCreateDelegate(ProjectScriptLifecycle.java:941)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.<init>(ProjectScriptLifecycle.java:932)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunction(ProjectScriptLifecycle.java:805)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:882)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.lambda$invoke$0(ScriptFunctionHelper.java:115)
	at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:108)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2024, 8:15pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/12 "2024-08-06T20:15:32Z")

</div>

The most common compilation error is failing to obey python's whitespace rules (cannot mix indentation by spaces with indentation by tabs, for example).

Please copy your entire script and paste it here. After pasting, highlight it all and click the "preformatted text" button so we can see your actual indentation.

Action scripts in Perspective generally supply a `def ....:` line at the top, which means everything under it must be indented one level.

Note that in the designer script console, your code _ **compiled** _ but failed to **run**. Now it is failing to **compile**.

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:19pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/13 "2024-08-06T20:19:24Z")

</div>

I found a typo, and fixed it. This is the script:

```python
def runAction(self, event):
	"""
	This evemt os fored wjem tje 'action' of the component occurs.
	Arguments:
	self:
	event:
	"""
	# TODO: send message to flexalert to display alert message and timeout error
	isError = system.date.toMillis(system.date.now)%2 # placeholder condition that checks even
	
	# best debugg print: system.perspective.sendMessage()
	system.perspective.print('isError: ', str(isError))
	# Trigger the message. For the message we need to create the Message Handler / Listener
	if isError:
		system.perspective.sendMessage('showAlert',
			payload = {'timeout': 5, 
				'color': '#00FF00'},		
			scope = 'view')
	else:
		system.perspective.sendMessage(
			'showAlert',
			payload = {
				'timeout': 5,
				'color': '#FF0000'
			},
			scope = 'view'
		)

```

Now I get new errors:

```python

16:22:11.299 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Error running action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: Traceback (most recent call last):
  File "<function:runAction>", line 9, in runAction
TypeError: toMillis(): 1st arg can't be coerced to java.util.Date

com.inductiveautomation.ignition.common.GenericTransferrableException: Traceback (most recent call last):
  File "<function:runAction>", line 9, in runAction
TypeError: toMillis(): 1st arg can't be coerced to java.util.Date

	at org.python.core.Py.TypeError(Py.java:234)
	at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:213)
	at org.python.core.PyReflectedFunction.throwBadArgError(PyReflectedFunction.java:316)
	at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:325)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:171)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:208)
	at org.python.core.PyObject. __call__ (PyObject.java:461)
	at org.python.core.PyObject. __call__ (PyObject.java:465)
	at org.python.pycode._pyx59.runAction$1(<function:runAction>:20)
	at org.python.pycode._pyx59.call_function(<function:runAction>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
	at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
	at org.python.core.PyFunction. __call__ (PyFunction.java:469)
	at org.python.core.PyFunction. __call__ (PyFunction.java:464)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:1010)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:950)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:161)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: TypeError: toMillis(): 1st arg can't be coerced to java.util.Date
	... 34 common frames omitted
16:22:11.300 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Error running action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: Traceback (most recent call last):
  File "<function:runAction>", line 9, in runAction
TypeError: toMillis(): 1st arg can't be coerced to java.util.Date

com.inductiveautomation.ignition.common.GenericTransferrableException: Traceback (most recent call last):
  File "<function:runAction>", line 9, in runAction
TypeError: toMillis(): 1st arg can't be coerced to java.util.Date

	at org.python.core.Py.TypeError(Py.java:234)
	at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:213)
	at org.python.core.PyReflectedFunction.throwBadArgError(PyReflectedFunction.java:316)
	at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:325)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:171)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:208)
	at org.python.core.PyObject. __call__ (PyObject.java:461)
	at org.python.core.PyObject. __call__ (PyObject.java:465)
	at org.python.pycode._pyx59.runAction$1(<function:runAction>:20)
	at org.python.pycode._pyx59.call_function(<function:runAction>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
	at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
	at org.python.core.PyFunction. __call__ (PyFunction.java:469)
	at org.python.core.PyFunction. __call__ (PyFunction.java:464)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:1010)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:950)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:161)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: TypeError: toMillis(): 1st arg can't be coerced to java.util.Date
	... 34 common frames omitted
16:22:11.300 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Error running action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: Traceback (most recent call last):
  File "<function:runAction>", line 9, in runAction
TypeError: toMillis(): 1st arg can't be coerced to java.util.Date

com.inductiveautomation.ignition.common.GenericTransferrableException: Traceback (most recent call last):
  File "<function:runAction>", line 9, in runAction
TypeError: toMillis(): 1st arg can't be coerced to java.util.Date

	at org.python.core.Py.TypeError(Py.java:234)
	at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:213)
	at org.python.core.PyReflectedFunction.throwBadArgError(PyReflectedFunction.java:316)
	at org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:325)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:171)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:208)
	at org.python.core.PyObject. __call__ (PyObject.java:461)
	at org.python.core.PyObject. __call__ (PyObject.java:465)
	at org.python.pycode._pyx59.runAction$1(<function:runAction>:20)
	at org.python.pycode._pyx59.call_function(<function:runAction>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
	at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
	at org.python.core.PyFunction. __call__ (PyFunction.java:469)
	at org.python.core.PyFunction. __call__ (PyFunction.java:464)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:1010)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:950)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:161)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: TypeError: toMillis(): 1st arg can't be coerced to java.util.Date
	... 34 common frames omitted

```

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 6, 2024, 8:21pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/14 "2024-08-06T20:21:52Z")

</div>

You're not calling system.date.now(), you're passing the function object itself into toMillis.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2024, 8:22pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/15 "2024-08-06T20:22:44Z")

</div>

> [@Daniel\_Lazaro](#):
>
> `system.date.toMillis(system.date.now)%2`

You are missing parentheses for `.now()`. So you passing a function object to `.toMillis()` where a datetime object is required.

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:22pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/16 "2024-08-06T20:22:47Z")

</div>

You are right, I fixed that earlier and apparently didn't save the changes, thank you/.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2024, 8:24pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/17 "2024-08-06T20:24:37Z")

</div>

Also note that [system.perspective.print()](https://www.docs.inductiveautomation.com/docs/8.1/appendix/scripting-functions/system-perspective/system-perspective-print) does **not** accept multiple items to print.

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:24pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/18 "2024-08-06T20:24:59Z")

</div>

True, as I told PGriffith I fixed that one earlier and maybe forgot to accept changes. I still get errors:

```python
16:26:49.570 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Error running action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: Traceback (most recent call last):
  File "<function:runAction>", line 12, in runAction
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0

com.inductiveautomation.ignition.common.GenericTransferrableException: Traceback (most recent call last):
  File "<function:runAction>", line 12, in runAction
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0

	at org.python.core.Py.JavaError(Py.java:545)
	at org.python.core.Py.JavaError(Py.java:536)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:192)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:553)
	at org.python.core.PyObject. __call__ (PyObject.java:477)
	at org.python.core.PyObject. __call__ (PyObject.java:481)
	at org.python.pycode._pyx61.runAction$1(<function:runAction>:20)
	at org.python.pycode._pyx61.call_function(<function:runAction>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
	at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
	at org.python.core.PyFunction. __call__ (PyFunction.java:469)
	at org.python.core.PyFunction. __call__ (PyFunction.java:464)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:1010)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:950)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:161)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0
	... 32 common frames omitted
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: Invalid UUID string: 0
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:190)
	... 29 common frames omitted
16:26:49.571 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Error running action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: Traceback (most recent call last):
  File "<function:runAction>", line 12, in runAction
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0

com.inductiveautomation.ignition.common.GenericTransferrableException: Traceback (most recent call last):
  File "<function:runAction>", line 12, in runAction
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0

	at org.python.core.Py.JavaError(Py.java:545)
	at org.python.core.Py.JavaError(Py.java:536)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:192)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:553)
	at org.python.core.PyObject. __call__ (PyObject.java:477)
	at org.python.core.PyObject. __call__ (PyObject.java:481)
	at org.python.pycode._pyx61.runAction$1(<function:runAction>:20)
	at org.python.pycode._pyx61.call_function(<function:runAction>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
	at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
	at org.python.core.PyFunction. __call__ (PyFunction.java:469)
	at org.python.core.PyFunction. __call__ (PyFunction.java:464)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:1010)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:950)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:161)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0
	... 32 common frames omitted
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: Invalid UUID string: 0
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:190)
	... 29 common frames omitted
16:26:49.572 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- Error running action 'component.onActionPerformed' on MsgHandlerTutorial@D/root/flexForm/flexButton/Button_0: Traceback (most recent call last):
  File "<function:runAction>", line 12, in runAction
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0

com.inductiveautomation.ignition.common.GenericTransferrableException: Traceback (most recent call last):
  File "<function:runAction>", line 12, in runAction
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0

	at org.python.core.Py.JavaError(Py.java:545)
	at org.python.core.Py.JavaError(Py.java:536)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:192)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:553)
	at org.python.core.PyObject. __call__ (PyObject.java:477)
	at org.python.core.PyObject. __call__ (PyObject.java:481)
	at org.python.pycode._pyx61.runAction$1(<function:runAction>:20)
	at org.python.pycode._pyx61.call_function(<function:runAction>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
	at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
	at org.python.core.PyFunction. __call__ (PyFunction.java:469)
	at org.python.core.PyFunction. __call__ (PyFunction.java:464)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:1010)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:950)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:161)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid UUID string: 0
	... 32 common frames omitted
Caused by: com.inductiveautomation.ignition.common.GenericTransferrableException: Invalid UUID string: 0
	at java.base/java.util.UUID.fromString1(Unknown Source)
	at java.base/java.util.UUID.fromString(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.getSession(AbstractScriptingFunctions.java:91)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnSession(AbstractScriptingFunctions.java:118)
	at com.inductiveautomation.perspective.gateway.script.AbstractScriptingFunctions.operateOnPage(AbstractScriptingFunctions.java:47)
	at com.inductiveautomation.perspective.gateway.script.PerspectiveScriptingFunctions.print(PerspectiveScriptingFunctions.java:704)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:190)
	... 29 common frames omitted

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2024, 8:26pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/19 "2024-08-06T20:26:53Z")

</div>

You are passing `str(isError)` where `.print()` expects a session ID. It is trying to decipher a session ID (those are UUIDs) from something you think you are trying to print.

---

<div class="post-metadata">

**Author:** ![Daniel\_Lazaro](https://avatars.discourse-cdn.com/v4/letter/d/97f17d/32.png) [@Daniel\_Lazaro](https://forum.inductiveautomation.com/u/Daniel_Lazaro)\
**Post date:** [August 6, 2024, 8:27pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/20 "2024-08-06T20:27:43Z")

</div>

I replaced the comma with a + and get more errors, I clearly need to double check everything and be reply less often. thank you for you help

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 6, 2024, 8:44pm UTC](https://forum.inductiveautomation.com/t/i-get-this-error-when-executing-a-chunk-of-code-i-am-debugging-attributeerror-com-inductiveautomation-ignition-designer-gui-tool-object-has-no-attribute-perspective/94254/21 "2024-08-06T20:44:12Z")

</div>

Consider a refactor to something like this to reduce duplication:

```python
def runAction(self, event):
	isError = system.date.toMillis(system.date.now()) % 2
	
	system.perspective.print('isError: {}'.format(isError))
	if isError:
		color = '#00FF00'
	else:
		color = '#FF0000'
	
	payload = {
		'timeout': 5,
		'color': color
	}

	system.perspective.sendMessage('showAlert', payload = payload, scope = 'view')

```

Or even:

```python
def runAction(self, event):
	isError = system.date.toMillis(system.date.now()) % 2
	
	system.perspective.print('isError: {}'.format(isError))
	
	payload = {
		'timeout': 5,
		'color': '#00FF00' if isError '#FF0000'
	}

	system.perspective.sendMessage('showAlert', payload = payload, scope = 'view')

```
