python - 试图在类中引发自定义异常
问题描述
class RadiusInputError(Exception):
pass
class Circle:
try:
def __init__(self, radius):
if isinstance(radius, int):
pass
else:
raise RadiusInputError
self.radius = radius
except RadiusInputError:
print('Radius is not a number')
c1 = Circle('hello')
当非整数值作为半径传递时,代码应该执行 except 块,但它显示以下错误:
Traceback (most recent call last):
File "D:/Pycharm Projects/HelloWorld/HandsOn10.py", line 17, in <module>
c1 = Circle('hello')
File "D:/Pycharm Projects/HelloWorld/HandsOn10.py", line 11, in __init__
raise RadiusInputError
__main__.RadiusInputError
解决方案
问题是该try/except
块将只执行一次 -在此类的定义中:
class Circle:
try:
# try to define this method
def __init__(self, radius):
if isinstance(radius, int):
pass
else:
raise RadiusInputError
self.radius = radius
# if we got here, the method has been defined successfully!
except RadiusInputError:
# if we got here, an exception occurred WHILE DEFINING THE METHOD
print('Radius is not a number')
此代码丝毫不会影响对的调用Circle.__init__
。
你可以在这里看到它是如何工作的:
>>> class Test:
... print("before definition")
... def __init__(self):
... print("inside __self__")
... print("after definition - bye!")
...
before definition
after definition - bye!
>>> Test()
inside __self__
<__main__.Test object at 0x103541438>
>>>
您必须在呼叫站点处理异常:
class Circle:
def __init__(self, radius):
if not isinstance(radius, int):
raise RadiusInputError("Wrong radius!")
self.radius = radius
try:
c1 = Circle('hello')
except RadiusInputError as err:
print(f"Oops, something went wring: {err}"!)
推荐阅读
- javascript - 在运行时动态更新 jQuery timepicker minTime
- npm - Npm 包漏洞显示在未知依赖项上
- apache-spark - YARN记录.gz格式如何使用命令解压
- php - 如何在laravel中使用按钮传递列名?
- c# - 是否有检查路径是否包含在路径中的功能?
- java - 广播接收器调用自己超过 1 次
- python - 如何使用 csv 模块在 csv 列中搜索特定单词
- javascript - Kendo UI:如何通过删除/添加交换 DOM 元素
- reactjs - 从我在 react-table 中发送请求的 api 获取
- hibernate - Spring Boot:“字段需要一个找不到的 'javax.persistence.EntityManagerFactory' 类型的 bean。”