2012-05-09 95 views
2

我有一個與PHP應用程序進行通信的python應用程序。 現在,我已經在兩邊定義了錯誤代碼,以便它們匹配(即我們可以檢測PHP中的python端故障並作出相應的反應)。哪裏可以找到python解釋器錯誤代碼?

我的問題來自python是一種解釋型語言,這裏是爲什麼: 如果代碼有語法問題,那麼解釋器將返回錯誤代碼。 但這些解釋器錯誤代碼與應用程序錯誤無法區分。

我並不負責Python代碼,但我被要求能夠檢測到最終的python解釋器失敗,所以我可以通知使用PHP的最終用戶。

因此,我需要找到故障時解釋器返回代碼的列表。 我在google,python doc和man page上都找不到這個信息。

有沒有人知道在哪裏可以找到這些信息? (另外,如果您對如何解決此問題有任何其他想法,我很樂意聽到它們)

在此先感謝!

+1

你是什麼意思「雙方的錯誤代碼,以便他們*匹配*」? Python解釋器會爲* all *錯誤引發異常(否則它是解釋器中的錯誤)。您應該能夠抓住這些並將它們按照您的通信協議PHP應用程序可以理解的格式進行處理。 –

+0

難道你不能確保你的python腳本沒有語法錯誤嗎?您不應該執行您無法控制服務器的代碼...... –

+0

@NoufalIbrahim「兩邊的錯誤代碼,以便它們匹配」=> PHP部分是用戶界面。我需要能夠知道錯誤的原因究竟是什麼(使用退出/返回代碼),以便我對PHP部分作出相應的反應。 –

回答

2

最好的解決辦法將被設置一個exception hook,它始終與特定代碼退出。

import sys 
def excepthook(type, value, traceback): 
    sys.exit(X) # X is your exit code 
sys.excepthook = excepthook 

語法錯誤應該是無關的 - 爲什麼你沒有把它包含在生產語法錯誤的腳本?

但無論如何,如果一切正常,Python始終會以非零代碼退出(顯然總是1),如果沒有發現異常,則總是退出0

+0

我同意你的觀點,即語法錯誤應該是不相關的。但我不是編碼python部分的人,我被要求能夠檢測到這些錯誤,並使用PHP向最終用戶顯示相應的消息。至於非零代碼,它「顯然」總是一個,但我不想採取任何瘋狂的猜測。如果它以某種方式開始將2返回爲另一種錯誤類型,則必須重新開始。我喜歡你的excepthook的想法,我要去嘗試:) –

+0

我試過你的解決方案,它不適用於我的情況。原因如下:python解釋器在運行代碼之前檢查語法錯誤(顯然,我很慚愧我甚至沒有想到),所以修改後的excepthook還沒有執行。簡而言之,它將無法處理python解釋器錯誤。如果你正在考慮使用它來讓所有的python端錯誤屬於同一個錯誤代碼,這是不可能的,因爲錯誤代碼正是我們區分錯誤PHP端的方式。 –

+0

我喜歡這個excepthook建議。 我想補充說,在將它部署到生產環境之前,您可能應該對python代碼進行pylint'ing(或pychecker'ing或至少pyflakes)。 – user1277476

1

我相信這可能是你需要的。它會將錯誤代碼映射到它們各自的字符串消息。

http://docs.python.org/library/errno.html

具體來說:

http://docs.python.org/library/os.html#os.strerror

+0

不客氣。這會將錯誤代碼映射到原始OP所需的消息。當然沒有提供自動翻譯的機制。 –

+1

這似乎只是一種使用python與操作系統錯誤代碼進行通信的方式。應用程序(帶有自己的錯誤代碼)和解釋器(帶有自己的其他錯誤代碼)都不會與這個錯誤代碼系統有任何關係。 –

相關問題