作者shala (沙罗是转换後的文字档打m)
看板Python
标题[问题] 如何避免执行遇错时console视窗闪退?
时间Sat Jan 26 18:21:47 2019
可能是个蠢问题,不好意思
py程式执行完成後会自动关闭console视窗
虽然程式最後加个input()可以暂停关闭
但若是在执行到input()前就遇到错误,console视窗也是会闪退
这有方法克服吗?
还是说只能先开console视窗再执行py程式呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 205.185.214.110
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1548498109.A.FCD.html
1F:推 CodingMan: try?01/26 18:23
只剩这个选项了吗QQ
2F:推 rexyeah: 在terminal 下执行应该不会闪退。01/26 18:34
对,这也是我现在的做法,所以想寻求更好的解法
※ 编辑: shala (173.213.89.40), 01/26/2019 19:15:45
3F:推 XperiaZ6C: 你写一个两行bat专门run这个py档就好,记得第二行是pa01/26 19:17
4F:→ XperiaZ6C: use01/26 19:17
5F:→ XperiaZ6C: 跟直接点两下执行py档其实意思差不到01/26 19:17
还是只能靠外部辅助了吗QQ
6F:推 yangs0618: 我都用cmd 执行01/26 19:32
※ 编辑: shala (209.107.210.222), 01/26/2019 22:43:18
7F:推 asd2213857: 我是在每个可能出错部分前都加一个input() 这样我比01/27 01:09
8F:→ asd2213857: 较方便检查01/27 01:09
9F:→ asd2213857: 不然之前测试sys.argv差点发疯01/27 01:09
出错前设input无法阻止出错後的闪退QQ
10F:推 HenryLiKing: 本来就该用 try 啊01/27 10:43
11F:→ HenryLiKing: 不然你怎麽知道什麽时候发生错误....01/27 10:44
原本是希望出错时能停在报错画面,看来只能等Python未来有没有要改了QQ
12F:→ HenryLiKing: 不然用01/27 10:44
13F:→ HenryLiKing: import os; os.system("pause")01/27 10:45
这跟input的效果一样吧
※ 编辑: shala (162.251.232.125), 01/27/2019 13:36:51
14F:推 lemon651: ...程式终止本来console就会结束 不懂你觉得python未来 01/27 15:02
15F:推 lemon651: 试想你写一个程式没处理exception,exception一出来就01/27 15:06
16F:→ lemon651: 让程式停在那里,合理吗? 01/27 15:06
17F:推 lemon651: *不懂你觉得python未来要改什麽01/27 15:09
我觉得程式遇错终止跟视窗是否自动关闭可以当作两个独立事件
18F:推 ripple0129: 你可以try catch error写进档案,catch error後sys pa01/27 16:53
19F:→ ripple0129: use 01/27 16:53
写进档案也是一个方法,不过不是我的目的QQ
20F:推 Sunal: 原PO只是想要一个方便的debugger吧01/27 17:14
也可以这麽说啦。就只是想要视窗不要自动关闭而已
21F:推 yangs0618: 我回答的可以吧 被54了 01/27 17:53
不好意思没回覆,因为我也是在console视窗下执行。
22F:推 eight0: process 结束时关闭视窗是 OS 的行为和 python 无关01/27 21:04
23F:→ eight0: 想要额外处理输入输出可以自己写一个 launcher 01/27 21:06
原来如此,我误会了
24F:→ s860134: 你的要求其实很简单 用一个 try:...except: input() 01/27 23:20
25F:→ s860134: 把你的程式逻辑包起来,不就停下来了吗?01/27 23:20
26F:→ s860134: except BaseException as e: logging.error(e, exc_info= 01/27 23:21
27F:→ s860134: True) 你要的只是想印在萤幕上吧 01/27 23:21
谢谢。try我会,想看看还有没有其他解法
28F:→ stucode: 推额外写一个 launcher。01/27 23:55
29F:→ stucode: 虽然在 atexit 跟 sys.excepthook 暂停都可以达成目的,01/27 23:55
30F:→ stucode: 但是它们都有一些无法对应的情况。(详见文件跟 01/27 23:56
31F:→ stucode: issue1230540) 01/27 23:57
谢谢,这个解法有点意思,我试看看
※ 编辑: shala (216.151.183.162), 01/28/2019 17:21:55
32F:推 x246libra: 这些开源程式都是UNIX起家的 人家都是在terminal作业 01/28 18:56
33F:→ x246libra: 自然不会遇到你说的问题 你的觉得奇怪 是因为微软的 01/28 18:57
34F:→ x246libra: 做法 都是在gui视窗工作 所以你才觉得反人性 01/28 18:58
35F:→ x246libra: 真正搞软体开法的 最後应该都是要回到 终端机的 01/28 18:58