🐛 Script Editor - Stuck In ReadOnly Mode After Exception

Hi @eirannejad,

Working on getting you a sample of code but since 8.18 the script editor often gets stuck in ReadOnly mode if the code throws an exception via something like this:

    def CreateButtons(self):
        try:
            # Add some code that will throw exception here
            print(f"buttons_length: {len(self.buttons}")
                
        except Exception as ex:
            Rhino.RhinoApp.WriteLine(f"CreateButtons Exception: {ex}")
CreateButtons Exception: '<__main__.Form__Toolbar object at 0x0000025C88043700>' object has no attribute 'buttons'

Do you see this on your end? For me it happens anytime I throw an exception and close out of an Eto.Form that would have contained the “exception causing code”

I can only get out of the ReadOnly mode with a restart of Rhino, and even then, I sometimes still see a “Rhino” process in my taskbar in Background Processes (Still trying to figure out if that is related to this or if that is caused by my code elsewhere)

I can still work in Rhino, create geometry, etc… but cannot use the ScriptEditor

What I see in the script editor when this happens:
image

image

What I see in my task manager AFTER completely closing Rhino:

Thanks for your help!

System Info

Rhino 8 SR20 2025-4-25 (Rhino 8, 8.20.25115.10001, Git hash:master @ 20b43256bd826988cbf7973fffd80164d23de83a)
License type: Commercial, build 2025-04-25
License details: Cloud Zoo

Windows 11 (10.0.26100 SR0.0) or greater (Physical RAM: 64GB)
.NET 8.0.14

Computer platform: LAPTOP - Plugged in [100% battery remaining]

Standard graphics configuration.
Primary display: DisplayLink USB Device (DisplayLink) Memory: 0MB, Driver date: 12-18-2024 (M-D-Y).
> External USB display device with 4 adapter port(s)
- Windows Main Display attached to adapter port 0
Primary OpenGL: NVIDIA GeForce RTX 3080 Ti Laptop GPU (NVidia) Memory: 16GB, Driver date: 11-6-2024 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 566.14
> Integrated accelerated graphics device with 4 adapter port(s)
- Video pass-through to primary display device

Secondary graphics devices.
Intel(R) Iris(R) Xe Graphics (Intel) Memory: 1GB, Driver date: 10-26-2022 (M-D-Y).
> Integrated graphics device with 4 adapter port(s)
- There are no monitors attached to this device. Laptop lid is probably closed
DisplayLink USB Device (DisplayLink) Memory: 0MB, Driver date: 12-18-2024 (M-D-Y).
> External USB display device with 0 adapter port(s)
- There are no monitors attached to this device. Laptop lid is probably closed

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
GPU Tessellation is: On
Redraw scene when viewports are exposed: Off
Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)

Anti-alias mode: 4x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 11-6-2024
Driver Version: 32.0.15.6614
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 16 GB

Rhino plugins that do not ship with Rhino
C:\ProgramData\McNeel\Rhinoceros\7.0\Plug-ins\Datasmith Rhino Exporter (d1fdc795-b334-4933-b680-088119cdc6bb)\DatasmithRhino7.rhp “Datasmith Exporter” 5.1.0.0
C:\Program Files\Enscape\Enscape.Rhino.Plugin-net48\Enscape.Rhino8.Plugin.dll “Enscape.Rhino8.Plugin” 4.2.1.88
C:\Users\micha\AppData\Roaming\McNeel\Rhinoceros\packages\8.0\Crash\1.4.2-beta\Crash.rhp “Crash” 1.4.0.0
C:\Users\micha\AppData\Roaming\McNeel\Rhinoceros\8.0\Plug-ins\D5LiveSync (e0d5e210-02f6-4ee9-a2b0-1675e225d958)\D5Conv.rhp “D5 Live Sync for Rhino”

Rhino plugins that ship with Rhino
C:\Program Files\Rhino 8\Plug-ins\Commands.rhp “Commands” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\rdk.rhp “Renderer Development Kit”
C:\Program Files\Rhino 8\Plug-ins\RhinoRenderCycles.rhp “Rhino Render” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\rdk_etoui.rhp “RDK_EtoUI” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\NamedSnapshots.rhp “Snapshots”
C:\Program Files\Rhino 8\Plug-ins\MeshCommands.rhp “MeshCommands” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\RhinoCycles.rhp “RhinoCycles” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\Grasshopper\GrasshopperPlugin.rhp “Grasshopper” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\RhinoCode\RhinoCodePlugin.rhp “RhinoCodePlugin” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 8.20.25115.10001
C:\Program Files\Rhino 8\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”
C:\Program Files\Rhino 8\Plug-ins\Displacement.rhp “Displacement”
C:\Program Files\Rhino 8\Plug-ins\SectionTools.rhp “SectionTools”

UPDATE:

I seem to have traced this back to a single variable “get_result = None” that was set at some time in a Get() subclass.

I still am not sure if this is 100% the cause, I’ll report back if it is not and the read only locking returns again but my guess is the code was “interrupting” the command completion sequence somehow leaving the Script Editor in ReadOnly mode.

Unfortunately, no exceptions, errors, or dumps were ever returned so tracking the bug was rather challenging.

EDIT:

Nevermind, this is definitely related to exceptions being thrown. Investigating further…

1 Like