PyTorch 报错:TypeError: exceptions must derive from BaseException

17 篇文章 0 订阅
16 篇文章 1 订阅

PyTorch 报错:TypeError: exceptions must derive from BaseException

 

其实是个低级错误,我个人认为是因为没有找到要运行的载体。以自己的代码为例:

我在 base_options.py 里面设置 --netG 的参数只能在这几个里面选择:

self.parser.add_argument('--netG', type=str, default='p2hed', choices=['p2hed', 'refineD', 'p2hed_att'], help='selects model to use for netG')

但是我在选择 netG 时的代码写成了:

def define_G(input_nc, output_nc, ngf, netG, n_downsample_global=3, n_blocks_global=9, n_local_enhancers=1, 
             n_blocks_local=3, norm='instance', gpu_ids=[]):    
    norm_layer = get_norm_layer(norm_type=norm)     
    if netG == 'p2hed':    
        netG = DDNet_p2hED(input_nc, output_nc, ngf, n_downsample_global, n_blocks_global, norm_layer)
    elif netG == 'refineDepth':
        netG = DDNet_RefineDepth(input_nc, output_nc, ngf, n_downsample_global, n_blocks_global, n_local_enhancers, n_blocks_local, norm_layer)
    elif netG == 'p2h_noatt':        
        netG = DDNet_p2hed_noatt(input_nc, output_nc, ngf, n_downsample_global, n_blocks_global, n_local_enhancers, n_blocks_local, norm_layer)
    else:
        raise('generator not implemented!')
    #print(netG)
    if len(gpu_ids) > 0:
        assert(torch.cuda.is_available())   
        netG.cuda(gpu_ids[0])
    netG.apply(weights_init)
    return netG

注意,这里没没有 ‘rfineD’ 这个选项,所以当运行代码时,程序找不到 netG 该选择那个网络,故而报错。

 

其实,把上面那个代码里面的  “ elif netG == 'refineDepth': ” 改成 “elif netG == 'refineD':” 就可以了。

 

 

  • 2
    点赞
  • 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、付费专栏及课程。

余额充值