相关疑难解决方法(0)

使用不同的类型和消息重新引发异常,保留现有信息

我正在编写一个模块,并希望为它可以引发的异常建立一个统一的异常层次结构(例如,从一个FooError抽象类继承所有foo模块的特定异常).这允许模块的用户捕获这些特定异常并在需要时明确地处理它们.但是由于其他一些例外,该模块提出的许多例外都被提出; 例如,由于文件上的OSError而导致某些任务失败.

我需要的是"包装"捕获的异常,使其具有不同的类型和消息,以便通过捕获异常的任何信息在传播层次结构中进一步提供信息.但我不想丢失现有的类型,消息和堆栈跟踪; 这对于试图调试问题的人来说都是有用的信息.顶级异常处理程序并不好,因为我试图在异常进入传播堆栈之前修饰异常,并且顶级处理程序为时已晚.

这部分是通过foo从现有类型(例如class FooPermissionError(OSError, FooError))派生模块的特定异常类型来解决的,但这并不会使现有异常实例包装在新类型中更容易,也不会修改消息.

Python的PEP 3134 "异常链接和嵌入式回溯"讨论了Python 3.0中为"链接"异常对象所接受的更改,以指示在处理现有异常期间引发了新的异常.

我正在尝试做的是相关:我需要它也在早期的Python版本中工作,我需要它不是为了链接,而只是为了多态.这样做的正确方法是什么?

python polymorphism exception-handling

128
推荐指数
4
解决办法
4万
查看次数

将信息添加到例外?

编辑:我正在运行python 2.6

我希望实现这样的目标:

def foo():
   try:
       raise IOError('Stuff ')
   except:
       raise

def bar(arg1):
    try:
       foo()
    except Exception as e:
       e.message = e.message + 'happens at %s' % arg1
       raise

bar('arg1')
Run Code Online (Sandbox Code Playgroud)
Traceback...
  IOError('Stuff Happens at arg1')
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

Traceback..
  IOError('Stuff')
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一点的任何线索?

python exception

116
推荐指数
6
解决办法
6万
查看次数

Python更改异常可打印输出,例如重载__builtins__

我正在寻找一种方法将异常的可打印输出更改为愚蠢的消息,以便了解有关 python 内部结构的更多信息(并与朋友搞混;),但到目前为止还没有成功。

考虑以下代码

try:
   x # is not defined
except NameError as exc:
   print(exc)
Run Code Online (Sandbox Code Playgroud)

代码应输出 name 'x' is not defined

我希望将输出更改为the name 'x' you suggested is not yet defined, my lord. Improve your coding skills.

到目前为止,我明白你不能改变,__builtins__因为它们被“烘焙”为 C 代码,除非:

  1. 您使用 forbiddenfruit.curse 方法添加/更改任何对象的属性
  2. 您手动覆盖对象的字典

我已经尝试了两种解决方案,但没有成功:

禁果解决方案:

from forbiddenfruit import curse

curse(BaseException, 'repr', lambda self: print("Test message for repr"))
curse(BaseException, 'str', lambda self: print("Test message for str"))

try:
    x
except NameError as exc:
    print(exc.str()) # Works, shows test …
Run Code Online (Sandbox Code Playgroud)

python built-in python-3.x

8
推荐指数
1
解决办法
248
查看次数

在Python中捕获PyCharm停止信号

我想尝试在 try 块中捕获 PyCharm 的停止信号(当按下停止时),但我无法弄清楚这个信号是什么或如何在代码中捕获它。JetBrains 并未在其文档中提供对此的深入了解。

我尝试过捕获它,BaseException但它似乎根本不是例外。

这是可以通过编程捕获的吗?

python debugging exception pycharm

5
推荐指数
2
解决办法
1061
查看次数

我如何在python中生成自定义错误消息

在我正在制作的python程序中,我希望它只采用整数,如果它得到一个字符串,则说"系统中存在错误".用户不会理解,而不是篡改敏感的信息

python python-3.x

2
推荐指数
4
解决办法
3万
查看次数