在学习抛出异常的过程中,关于错误信息 TypeError: exceptions must derive from BaseException 的原因...

虽然是个很low的问题,但是自己还是出现了,所以特地记录下来,保证自己不会再犯。首先看看我的代码

def FooError(ValueError):
  pass
def foo(s):
  n=int(s)
if n==0:
  raise FooError('无效的值:%s'%s)
return 10/n
print(foo('0'))

运行结果为:

Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\py\廖雪峰\错误处理\抛出异常.py", line 8, in <module>
print(foo('0'))
File "C:\Users\Administrator\Desktop\py\廖雪峰\错误处理\抛出异常.py", line 6, in foo
raise FooError('无效的值:s')
TypeError: exceptions must derive from BaseException

异常必须从基础异常类中派生。然后看了下自己的第一行。用的是def,这是创建了一个方法。。而不是一个类,简单的语法错误。只要将第一行的def改成class

 

class FooError(ValueError):
  pass
def foo(s):
  n=int(s)
if n==0:
  raise FooError('无效的值:%s'%s)
return 10/n
print(foo('0'))

 

再来看下运行结果:

Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\py\廖雪峰\错误处理\抛出异常.py", line 8, in <module>
print(foo('0'))
File "C:\Users\Administrator\Desktop\py\廖雪峰\错误处理\抛出异常.py", line 6, in foo
raise FooError('无效的值:%s'%s)
__main__.FooError: 无效的值:0

 

转载于:https://www.cnblogs.com/bidepanpan/p/7115153.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误提示意味着异常必须从 BaseException 类派生。在 Python ,所有异常都必须是 Exception 类或其子类的实例。如果一个异常不是 Exception 类或其子类的实例,就会引发 TypeError。 因此,如果你定义一个异常类,你需要确保它继承自 BaseException 类或其子类,否则就会出现这个错误。 ### 回答2: 这个错误信息的意思是:TypeError(类型错误):异常必须来源于BaseException(基本异常)。 在Python,所有异常都必须是BaseException的子类。这是因为所有异常都具有基本异常所具有的一些属性和方法,例如args(存储与异常相关的参数)和str(返回异常的字符串表示形式)等。如果异常不是BaseException的子类,则无法保证它们具有这些属性和方法。 当我们在使用try-except语句捕获异常时,如果我们在except子句指定了一个不是BaseException的异常类,就会出现这个错误。例如,以下代码将引发此错误: ``` class MyException: pass try: # some code except MyException: # handle the exception ``` 这是因为MyException不是BaseException的子类。 要解决这个错误,我们需要将异常类指定为BaseException的子类。例如,我们可以这样做: ``` class MyException(BaseException): pass try: # some code except MyException: # handle the exception ``` 现在,MyExceptionBaseException的子类,因此我们可以在except子句捕获它。 总之,TypeError:异常必须来源于BaseException是一个常见的Python错误,表示我们使用了不是BaseException的子类作为异常,需要修复它以确保代码的正确性和可靠性。 ### 回答3: 该错误信息表示您定义了一个不合法的异常类。在Python,所有自定义的异常类都必须派生自 `BaseException` 类或其子类,它是所有异常类的基类。 `BaseException` 对象是一个内置的基本异常类,作为所有其他异常类的超类。如果您的自定义异常类没有从 `BaseException` 类继承,则编译器将不允许该类正确地捕获和传播异常。 当然,您还可以从其他子类继承,例如 `Exception`、`ValueError` 或 `TypeError` 等,但至少它们应继承自 `BaseException`. 请注意,如果您的自定义异常类不受控制地抛出了任何非 `BaseException` 或其子类的异常,则在应用程序崩溃前它会帮助您捕获问题并阻止异常传播。 例如,下面的示例代码展示了如何正确地定义一个自定义异常类: ```python class CustomException(BaseException): def __init__(self, message=None): self.message = message super().__init__(self.message) ``` 在这个例子,我们定义了一个名为 `CustomException` 的自定义异常类,该类从 `BaseException` 类继承,并定义一个自己的构造器,它初始化一个 name 属性并调用父类的构造函数。 总之,如果您在定义自定义异常类时收到 `TypeError: exceptions must derive from BaseException` 异常,则必须检查您的代码并确保您的类正确继承自 Python 的异常体系结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值