![](/img/trans.png)
[英]Numba “Use of unsupported opcode (CONTINUE_LOOP) found” error when using continue in for loop
[英]Why does Python's CONTINUE_LOOP allow an outer loop, when BREAK_LOOP doesn't?
我注意到Python的字節碼在這里有一個有趣的特點。
CONTINUE_LOOP
操作碼接受一個target
參數,該參數表示循環繼續執行的指令,這是FOR_ITER
指令。
但是, BREAK_LOOP
操作碼不會這樣做。 它只會突破當前(最里面)的循環。
這背后的原因是什么? 為什么要continue
但不能break
外循環?
你誤解了目標。 處理嵌套循環不需要該值。 相反,目標標記字節碼流中的點在指令之后移動到。 BREAK
不需要這樣的目標,因為該值已在其他地方定義。
BREAK_LOOP
結束循環,因此循環后繼續執行。 SETUP_LOOP
指令已經定義了端點,因此解釋器不需要任何附加信息來執行該操作碼。
另一方面, CONTINUE_LOOP
需要告知在哪里繼續。 在大多數循環中,使用JUMP_ABSOLUTE
操作碼 , CONTINUE_LOOP
在此處回顯該指令。 CONTINUE_LOOP
記錄更多信息來處理try
語句(跟蹤堆棧展開)。
在評估循環中,異常處理( try: ... except:
和try : ... finally:
以及上下文管理器( with ...:
和async with ...:
使用框架的通用概念塊 ,具有為其記錄的出口點,這是BREAK_LOOP
指令依賴於此處的內容。 不必跟蹤偏移量就這樣簡單,避免了編譯器和評估循環不得不重復(退出點也用於其他場景,而不僅僅是break
語句)。
但是跳轉更通用,因此它們的偏移更容易跟蹤與指令本身相關聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.