Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何捕获python中我没有定义的自定义异常_Python_Python 3.x_Exception_Error Handling - Fatal编程技术网

如何捕获python中我没有定义的自定义异常

如何捕获python中我没有定义的自定义异常,python,python-3.x,exception,error-handling,Python,Python 3.x,Exception,Error Handling,我有以下try块: 试试看: #根据情况,这可能会产生几种类型的错误 mymodule.do_stuff() 例外情况除外,如e: 打印(“出错,错误是:”+键入(e)。\uuuu name\uuuuuu) 我想捕获do\u stuff()中的潜在错误。经过反复试验,我能够生成一个潜在错误列表,这些错误可以通过打印类型(e)由do\u stuff()触发 DoStuffInsufficientMemoryException DoStuffInsufficientCPUException DoS

我有以下try块:

试试看:
#根据情况,这可能会产生几种类型的错误
mymodule.do_stuff()
例外情况除外,如e:
打印(“出错,错误是:”+键入(e)。\uuuu name\uuuuuu)
我想捕获
do\u stuff()
中的潜在错误。经过反复试验,我能够生成一个潜在错误列表,这些错误可以通过打印
类型(e)由
do\u stuff()
触发

DoStuffInsufficientMemoryException
DoStuffInsufficientCPUException
DoStuffInsufficientDiskException
但是如果我尝试将我的except语句从
Exception as e
修改为
EXCEPTIONDOSTufficientMemoryException
,我将得到一个错误,即未定义
DOSTufficientMemoryException

我尝试定义一个类来扩展它的
Exception
,正如这里的大多数教程/问题所建议的,基本上:

class WAFInvalidParameterException(Exception):
    pass
现在这个变量已被识别,但由于我无法控制
do_sutf()
将引发的错误,因此我无法在我的初始try块中真正引发该异常

理想情况下,除了每个错误,我希望有1个块,所以我希望有如下内容:

试试看:
mymodule.do_stuff()
除DostufficientMemoryException外:
空闲内存()
除DostufficientCPUEException外:
kill_进程()
除DostufficientDiskException外:
可用磁盘空间()
但这当然不起作用,因为这些变量没有定义。

通常如果函数

module.foo()
引发异常
DostufficientMemoryException
它也可以作为

from module import DoStuffInsufficientMemoryException
如果这导致
importorror
,则需要此答案中的函数;与
e
一起使用(它获取一个实例并返回类名)。如果它给

foo.bar.DoStuffInsufficientMemoryException
然后,您可以将异常导入为

from foo.bar import DoStuffInsufficientMemoryException

上述方法可能不适用于所有情况。一个值得注意的例子是Boto 3 AWS客户端库,它不使异常可导入,而通常是在函数

module.foo()
引发异常
DostufficientMemoryException
它也可以作为

from module import DoStuffInsufficientMemoryException
如果这导致
importorror
,则需要此答案中的函数;与
e
一起使用(它获取一个实例并返回类名)。如果它给

foo.bar.DoStuffInsufficientMemoryException
然后,您可以将异常导入为

from foo.bar import DoStuffInsufficientMemoryException


上述方法可能不适用于所有情况。一个值得注意的例子是Boto 3 AWS客户端库,它不使异常可导入-而是。

编辑:当然,您可以导入其他方法,而不是创建自己的方法

try/except块将尝试执行代码,如果在except语句中引发并指定了错误,它将停止执行try块中的代码,并执行except块中的其他代码。因此,要捕获自定义错误,首先必须提高它

如果您不知道,可以使用raise语句引发错误。在这里,我制作了一段简单的代码。我有一个自定义错误,一个初始化为2的变量x,以及一个向参数中给定的变量添加1的方法。如果变量变为3,该方法将引发CustomError

#在这里,我定义了自定义错误并允许显示自定义消息
#使用super()方法
类CustomError(异常):
定义初始化(self,msg):
超级()。\uuuuu初始化(msg)
#我将x初始化为2
x=2
#我创建了一个方法,将1添加到参数中给定的变量中
#如果变量变为3,则引发CustomError
#这是完全随机的,你可以在筹集资金之前进行任何检查
#您的自定义错误
def do_材料(x):
x+=1
如果x==3:
升起自定义错误(“x为3”)
#现在,我编写try/except块。如果是,我提出e(自定义错误)
#在方法do_stuff(x)中提出
尝试:
做些什么(x)
除CustomError为e外:
提高e

请随意试用代码,以便更好地理解它

编辑:当然,您可以导入其他方法,而不是创建自己的方法

try/except块将尝试执行代码,如果在except语句中引发并指定了错误,它将停止执行try块中的代码,并执行except块中的其他代码。因此,要捕获自定义错误,首先必须提高它

如果您不知道,可以使用raise语句引发错误。在这里,我制作了一段简单的代码。我有一个自定义错误,一个初始化为2的变量x,以及一个向参数中给定的变量添加1的方法。如果变量变为3,该方法将引发CustomError

#在这里,我定义了自定义错误并允许显示自定义消息
#使用super()方法
类CustomError(异常):
定义初始化(self,msg):
超级()。\uuuuu初始化(msg)
#我将x初始化为2
x=2
#我创建了一个方法,将1添加到参数中给定的变量中
#如果变量变为3,则引发CustomError
#这是完全随机的,你可以在筹集资金之前进行任何检查
#您的自定义错误
def do_材料(x):
x+=1
如果x==3:
升起自定义错误(“x为3”)
#现在,我编写try/except块。如果是,我提出e(自定义错误)
#在方法do_stuff(x)中提出
尝试:
做些什么(x)
除CustomError为e外:
提高e

请随意试用代码,以便更好地理解它

就像在没有模块说明符的情况下不能引用
do_stuff
一样,您必须指定在哪个模块名称空间中定义这些异常

试试看:
mymodule.do_stuff()
除了mymodule.DostufficientMemoryException之外:
空闲内存()
除mymodule.DostufficientCPUEException外:
kill_进程()
除mymodule.DostufficientDiskException外:
可用磁盘空间()
If