【问题标题】:How to show why "try" failed in python如何显示为什么“尝试”在 python 中失败
【发布时间】:2010-06-07 10:39:07
【问题描述】:

有没有说明为什么“尝试”失败并跳到“除外”,没有手动写出所有可能的错误,也没有结束程序?

示例:

try:
    1/0
except:
    someway to show 
    "Traceback (most recent call last):
       File "<pyshell#0>", line 1, in <module>
         1/0
    ZeroDivisionError: integer division or modulo by zero"

我不想做if:print error 1, elif: print error 2, elif: etc...。我想看看try 不存在时会显示的错误

【问题讨论】:

  • Semi-OT:不具体的except 子句几乎总是一个坏主意。您应该始终指定您计划捕获的异常,这样您就不会在意外的异常(例如 KeyboardInterruptException 出现然后您没有正确处理)时意外搞砸。

标签: python error-handling


【解决方案1】:

试试:

>>> try:
...     1/0
... except Exception, e:
...    print e
... 
integer division or modulo by zero

还有其他语法变体,例如:

>>> try:
...     1/0
... except Exception as e:
...    print e
... 
integer division or modulo by zero

更多信息可以在errors tutorial找到。

【讨论】:

  • 如果您想重新引发异常(即停止执行等),请使用raise e 或仅使用raise
【解决方案2】:

我经常使用traceback 记录此类异常以记录或显示在标准错误上:

import traceback
import sys

try:
    print 1/0
except Exception:
    s = traceback.format_exc()
    serr = "there were errors:\n%s\n" % (s)
    sys.stderr.write(serr) 

输出将显示有关行是发生异常的源的信息:

there were errors:
Traceback (most recent call last):
  File "c:\test\ex.py", line 5, in <module>
    print 1/0
ZeroDivisionError: integer division or modulo by zero

【讨论】:

  • 来自python.org/dev/peps/pep-0008:“在捕获异常时,尽可能提及特定异常,而不是使用裸露的 'except:' 子句。[...] 裸露的 'except:' 子句将捕获 SystemExit 和KeyboardInterrupt 异常,使使用 Control-C 更难中断程序,并且可以掩盖其他问题。如果要捕获所有表明程序错误的异常,请使用 'except Exception:'。"
  • 好的。将Exception 添加到except
猜你喜欢
  • 2012-04-08
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多