These two snippets are pretty much functionally identical:

with group:
    # Do something...

# ------

group.begin()
try:
    # Do something...
finally:
    group.end()


The `with`statement works with objects that implement Python's context manager 
protocol 
(https://docs.python.org/2/reference/datamodel.html#with-statement-context-managers).

Basically, if a class implements __enter__ and __exit__ methods, it can be used 
as the context manager in a `with` statement. When the block inside the `with` 
statement begins, the context manager's .__enter__() method is called, and when 
the block exits, the context manager's .__exit__() method is called 
unconditionally (even if an exception occurs in the block).

When using a Group node as a context manager, its .begin() method will be 
called by .__enter__(), and .end() will be called by .__exit__(). Thus, this is 
redundant:

with group:
    group.begin()
    # Do something...
    group.end()

It's worth noting that Nuke currently always returns the current context to the 
root node when a group context is exited, rather than to whatever context it 
was in before the context was changed to the group, though this is logged as a 
bug.

Hope that helps.

-Nathan



From: Justin GD 
Sent: Tuesday, November 17, 2015 9:58 AM
To: Nuke Python discussion 
Subject: Re: [Nuke-python] nuke.zoom and in group button

Hi all, 

That's a good question; 
I've been using the with statement as well with success.

I'm curious of what is the best method.

Cheers,
Justin

2015-11-17 17:24 GMT+00:00 Den Serras <denserras...@gmail.com>:

This leads to a slightly tangential discussion... I used to always use:


with group:

     (inner node stuff)


which generally seemed to work; but so many people use begin() that now I play 
it safe and do:


with group:

    group.begin()

    (inner node stuff)

    group.end()


But perhaps someone can explain what the theoretical and functional differences 
are between "with group" and "group.begin()", and whether by combining them I'm 
causing even more problems...


Thanks!

Den


On Tue, Nov 17, 2015 at 1:29 AM, Johan Forsgren <j.a.forsg...@gmail.com> wrote:

Root().begin() worked wonderfully, I had actually no idea that it existed at 
all, thanks!





2015-11-16 18:05 GMT+01:00 Mike Frank <michaeljfr...@gmail.com>:
nuke.Root().begin() 




_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python




_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python





--------------------------------------------------------------------------------
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to