我想在c/C++ DLL中使用python 2.7.5。這個DLL被另一個已經調試過挑戰的應用程序使用。在幾個小時之後,我將這個問題隔離開來,然後在'with'語句中讀取的文件拋出異常。這我不明白...'與'應吸收異常,如果正確實施,對吧?無論如何,從命令行調用相同的python代碼根本沒有問題。python 2 - 爲什麼'with'在嵌入式c代碼中表現不同?
我的C/CPP DLL調用這個...
def parsetest(filename):
bytesin = getMD3Bytes(filename)
return bytesin
def getMD3Bytes(filename):
filename = 'lower.md3'
bytes = ''
valuetoreturn = 1
try:
with open(filename,'rb') as fileptr:
if fileptr != None:
bytes = fileptr.read()
valuetoreturn = 333
except:
valuetoreturn = 991
return valuetoreturn
如果DLL運行通過這個代碼...
pValue = PyObject_CallObject(pFunc, arguments);
,並通過...
iResult = PyInt_AsLong(pValue);
得到的結果
iResult的值爲991而不是333,這隻有在'with'內沒有發生異常時纔會發生。我知道,因爲我有應用程序調用DLL彈出一個消息框與iResult它。
更有趣的對我來說,這個工程......
C:\Program Files (x86)\DeleD CE\Plugins>python
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import parseMD3
>>> testval = parseMD3.parsetest('junk')
>>> print testval
333
>>> exit()
那麼,爲什麼CLI蟒蛇返回不同的結果,從PyObject_CallObject相同的代碼被調用?爲什麼'與'在這裏有不同的表現?
你是對的......我誤解了'正在'與'做什麼是我的問題。 IOError返回錯誤代碼2(無法找到文件)。通過指定「C:/ Program Files(x86)/ DeleD CE/Plugins/lower.md3」而不是「lower.md3」來修復它。 –