[問題] 如何避免執行遇錯時console視窗閃退?

看板Python作者 (沙羅是轉換後的文字檔打m)時間6年前 (2019/01/26 18:21), 6年前編輯推噓14(14021)
留言35則, 13人參與, 6年前最新討論串1/1
可能是個蠢問題,不好意思 py程式執行完成後會自動關閉console視窗 雖然程式最後加個input()可以暫停關閉 但若是在執行到input()前就遇到錯誤,console視窗也是會閃退 這有方法克服嗎? 還是說只能先開console視窗再執行py程式呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 205.185.214.110 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1548498109.A.FCD.html

01/26 18:23, 6年前 , 1F
try?
01/26 18:23, 1F
只剩這個選項了嗎QQ

01/26 18:34, 6年前 , 2F
在terminal 下執行應該不會閃退。
01/26 18:34, 2F
對,這也是我現在的做法,所以想尋求更好的解法 ※ 編輯: shala (173.213.89.40), 01/26/2019 19:15:45

01/26 19:17, 6年前 , 3F
你寫一個兩行bat專門run這個py檔就好,記得第二行是pa
01/26 19:17, 3F

01/26 19:17, 6年前 , 4F
use
01/26 19:17, 4F

01/26 19:17, 6年前 , 5F
跟直接點兩下執行py檔其實意思差不到
01/26 19:17, 5F
還是只能靠外部輔助了嗎QQ

01/26 19:32, 6年前 , 6F
我都用cmd 執行
01/26 19:32, 6F
※ 編輯: shala (209.107.210.222), 01/26/2019 22:43:18

01/27 01:09, 6年前 , 7F
我是在每個可能出錯部分前都加一個input() 這樣我比
01/27 01:09, 7F

01/27 01:09, 6年前 , 8F
較方便檢查
01/27 01:09, 8F

01/27 01:09, 6年前 , 9F
不然之前測試sys.argv差點發瘋
01/27 01:09, 9F
出錯前設input無法阻止出錯後的閃退QQ

01/27 10:43, 6年前 , 10F
本來就該用 try 啊
01/27 10:43, 10F

01/27 10:44, 6年前 , 11F
不然你怎麼知道什麼時候發生錯誤....
01/27 10:44, 11F
原本是希望出錯時能停在報錯畫面,看來只能等Python未來有沒有要改了QQ

01/27 10:44, 6年前 , 12F
不然用
01/27 10:44, 12F

01/27 10:45, 6年前 , 13F
import os; os.system("pause")
01/27 10:45, 13F
這跟input的效果一樣吧 ※ 編輯: shala (162.251.232.125), 01/27/2019 13:36:51

01/27 15:02, 6年前 , 14F
...程式終止本來console就會結束 不懂你覺得python未來
01/27 15:02, 14F

01/27 15:06, 6年前 , 15F
試想你寫一個程式沒處理exception,exception一出來就
01/27 15:06, 15F

01/27 15:06, 6年前 , 16F
讓程式停在那裡,合理嗎?
01/27 15:06, 16F

01/27 15:09, 6年前 , 17F
*不懂你覺得python未來要改什麼
01/27 15:09, 17F
我覺得程式遇錯終止跟視窗是否自動關閉可以當作兩個獨立事件

01/27 16:53, 6年前 , 18F
你可以try catch error寫進檔案,catch error後sys pa
01/27 16:53, 18F

01/27 16:53, 6年前 , 19F
use
01/27 16:53, 19F
寫進檔案也是一個方法,不過不是我的目的QQ

01/27 17:14, 6年前 , 20F
原PO只是想要一個方便的debugger吧
01/27 17:14, 20F
也可以這麼說啦。就只是想要視窗不要自動關閉而已

01/27 17:53, 6年前 , 21F
我回答的可以吧 被54了
01/27 17:53, 21F
不好意思沒回覆,因為我也是在console視窗下執行。

01/27 21:04, 6年前 , 22F
process 結束時關閉視窗是 OS 的行為和 python 無關
01/27 21:04, 22F

01/27 21:06, 6年前 , 23F
想要額外處理輸入輸出可以自己寫一個 launcher
01/27 21:06, 23F
原來如此,我誤會了

01/27 23:20, 6年前 , 24F
你的要求其實很簡單 用一個 try:...except: input()
01/27 23:20, 24F

01/27 23:20, 6年前 , 25F
把你的程式邏輯包起來,不就停下來了嗎?
01/27 23:20, 25F

01/27 23:21, 6年前 , 26F
except BaseException as e: logging.error(e, exc_info=
01/27 23:21, 26F

01/27 23:21, 6年前 , 27F
True) 你要的只是想印在螢幕上吧
01/27 23:21, 27F
謝謝。try我會,想看看還有沒有其他解法

01/27 23:55, 6年前 , 28F
推額外寫一個 launcher。
01/27 23:55, 28F

01/27 23:55, 6年前 , 29F
雖然在 atexit 跟 sys.excepthook 暫停都可以達成目的,
01/27 23:55, 29F

01/27 23:56, 6年前 , 30F
但是它們都有一些無法對應的情況。(詳見文件跟
01/27 23:56, 30F

01/27 23:57, 6年前 , 31F
issue1230540)
01/27 23:57, 31F
謝謝,這個解法有點意思,我試看看 ※ 編輯: shala (216.151.183.162), 01/28/2019 17:21:55

01/28 18:56, 6年前 , 32F
這些開源程式都是UNIX起家的 人家都是在terminal作業
01/28 18:56, 32F

01/28 18:57, 6年前 , 33F
自然不會遇到妳說的問題 你的覺得奇怪 是因為微軟的
01/28 18:57, 33F

01/28 18:58, 6年前 , 34F
做法 都是在gui視窗工作 所以你才覺得反人性
01/28 18:58, 34F

01/28 18:58, 6年前 , 35F
真正搞軟體開法的 最後應該都是要回到 終端機的
01/28 18:58, 35F
文章代碼(AID): #1SJ3Iz_D (Python)
文章代碼(AID): #1SJ3Iz_D (Python)