【发布时间】:2016-08-31 05:24:05
【问题描述】:
Python 3.5.1.. 我有一些代码需要用来引发异常。我想知道这是否是“pythonic”的方式。我在其他地方被告知我应该使用 try/except,但是,在这种情况下,我被特别指示使用:
- if:raise /else
- LocationError 必须接受一个输入,位置
- LocationError 必须继承自 Exception 类
鉴于这些限制,有没有“更好”的方法来做到这一点?
location = [1, 2]
def update_loc(oldloc, newloc):
if oldloc == newloc:
raise LocationError('Location match, old location = {0}'.format(newloc))
else:
oldloc = newloc
return oldloc
class LocationError(Exception):
def __init__(self, location):
self._location = location #initial code
super().__init__(location) #fixed code
location = update_loc(location, [1, 2])
所以,有人告诉我,问题是我没有从 Parent 类继承(异常)。我猜想为异常创建一个子类的意义就是这样,仅此而已。
【问题讨论】:
-
您的字符串格式出现在错误的位置。
-
我不知道为什么你被告知应该使用 try/except 但应该在这里引发异常。其中一个加注,另一个接球。这就像说您应该从根本上返回一个值,但在这种情况下,您的函数需要接受一个参数。引发异常完全没问题,捕获它们也是如此。
-
它应该在哪里发生,我在问,因为我是根据我读过的例子写的,但感觉有些不对劲。
-
韦恩你的意思是像
e = LocationError(newloc)raise e -
我会考虑让你的自定义异常扩展一些更具体的东西,比如ValueError。请注意,文档说“在内置...时引发”,但这并不意味着您不能自己扩展它(或只是使用它);文档正在解释 Python 何时会提出此问题。
标签: python python-3.x exception python-3.5