2009-12-08 70 views
0

在Python中,"SystemError: com_backpatch: offset too large"正在執行由以下生成的代碼時拋出:見解上關於SystemError:com_backpatch:偏移太大

f = open("test.py", "w") 
f.write("def fn():\n a =1000\n") 
for a in xrange(3000): 
    if a == 0: 
     f.write(" if a == "+str(a)+": \n  print "+str(a)+"\n") 
    else: 
     f.write(" elif a == "+str(a)+": \n  print "+str(a)+"\n") 



f.close() 

import test 

很顯然,如果長度聲明超過一定的長度,它拋出這個錯誤。

有人可以更深入瞭解這個錯誤嗎?

+0

請問爲什麼需要生成這樣的代碼? – 2009-12-08 14:00:14

+0

我們有一個系統,需要應用大約100個規則。如果任何規則通過,我們會處理交易。這些規則由excel文件中的不同團隊維護,而不是開發人員。所以我們寫了一個腳本來生成這樣的代碼。 由於這個錯誤,我們移出了if..elif函數..如果返回。 – 2009-12-12 04:46:36

回答

0

看起來你打一個Python解釋器限制。看起來從if開始到結尾的分支太遠了 - 可能是因爲偏移被限制在16位。如果您將「elif」更改爲「if」,那麼問題就會消失。

您需要縮小「if/elif」鏈的大小。

HIH

...任賢齊

+0

謝謝。我想出了問題的解決方案,但沒有解決問題的內部問題。 – 2009-12-12 04:47:46

0

JFYI,這個腳本在Debian的測試主機爲我工作了32位空間和內核和Python 2.5.4。

$ ls -ln 
total 4 
-rw-r--r-- 1 1000 1000 270 2009-12-23 02:53 gentest.py 
$ python gentest.py 
$ ls -ln 
total 216 
-rw-r--r-- 1 1000 1000 270 2009-12-23 02:53 gentest.py 
-rw-r--r-- 1 1000 1000 111799 2009-12-23 02:58 test.py 
-rw-r--r-- 1 1000 1000 93299 2009-12-23 02:58 test.pyc 
$ uname -srvmo 
Linux 2.6.30-2-486 #1 Thu Dec 3 23:32:25 UTC 2009 i686 GNU/Linux 
$ python --version 
Python 2.5.4