[英]If statement executes when it's false
當我嘗試添加旋鈕時,我收到“旋鈕已連接到節點”
當我嘗試從 menu.py 按鈕運行我的代碼時,我得到了這個。如果我從腳本編輯器運行腳本,我沒有收到錯誤.. 為什么會這樣?
for i in nuke.allNodes():
if not i.knob("tempMb"):
if sum0 == 0:
nuke.message("first tmp knob created")
i.addKnob(t)
elif sum0 != 0:
nuke.message("second tmp knob created")
else:
nuke.message("no nob created")
即使我檢查是否有一個名為 tempMb 的旋鈕.. 它仍然像沒有一樣執行它,當有時 .. 編輯:“t”早先被定義為 Int_Knob ......
謝謝!
首先,我要將elif
更改為else
因為您的 if 條件已經在測試 elif 條件,而我看不到在此代碼中會如何更改。
for i in nuke.allNodes():
if not i.knob("tempMb"):
if sum0 == 0:
nuke.message("first tmp knob created")
i.addKnob(t)
else:
nuke.message("second tmp knob created")
else:
nuke.message("no nob created")
其次,我假設i.knob(string)
不檢查該名稱的旋鈕是否存在,否則您的代碼會表現得更像您預期的那樣。 因此,當我閱讀文檔時,似乎可能會發生一些事情:
nuke.allNodes(nuke.Knob)
。if i.name != "tempMb":
或者if i.label != "tempMb"
這取決於您如何創建t
。 盡管如此,我認為這里可能存在邏輯錯誤。 如果您有 2 個節點(並且如果您進行了上述更改,我們假設它們都是旋鈕),並且當您遍歷所有節點時,第一個節點是tempMb
,那么當您檢查第二個節點時,它不會是那個你會嘗試添加t
,我假設它也被命名為tempMb
。 所以這就是為什么在你看來,負面情況似乎總是在發生。
您需要通過以下兩種方式之一進行重組:
tempMb
時將其設置為 true; 一旦發生這種情況,您最好立即退出循環。 在循環之后檢查布爾值以查看添加t
是否安全。nuke.exists(s)
它告訴你是否有任何名為s
“項目”。也許刪除循環並編寫以下內容:
if not nuke.exists("tempMb"):
# Add your knob. I'm actually not seeing `addKnob` in the docs.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.