程序bug及工具使用记录

程序bug及工具使用记录

  • 1.问题一
    • 项目场景:DLL load failed while importing _errors
    • 问题描述:
    • 原因分析:
    • 解决方案:
  • 2.问题二 TypeError: pic should be Tensor or ndarray
    • 项目场景:
    • 问题描述:
    • 原因分析:
    • 解决方案:
  • 3.问题三 Pentaho与mysql驱动
    • 问题描述:
    • 原因分析:
    • 解决方案:
  • 四.问题四 矩池云jupyter数据集多出无关目录
    • 问题描述:
    • 解决方案:
    • Thanks

1.问题一

项目场景:DLL load failed while importing _errors

windows系统下
python3.8
使用anaconda获取包h5py时,其他包也可能会有此问题
使用pycharm运行程序

问题描述:

出现DLL load failed while importing _errors: 找不到指定的程序,ImportError字样。 我的程序是针对h5py包,出现from . import _errors此语句错误。

原因分析:

1.直接百度该错误得到的解决方法是重新安装包,失败了。
2.找到_errors.pyd或者是**.pyd,也就是报错的那个语句所用到的文件,发现是dll库缺失。
3.一般是由于自己之前做个什么操作影响了系统的dll库,特别是之前引用python包时可以使用,但现在无法使用了。

解决方案:

1.可以使用用dependency walker查看xxx.pyd依赖的DLL,然后将所有DLL放入xxx.pyd所在目录。
2.直接使用“dll修复工具.exe”自动修复,此外,在后来的实验中发现conda安装的修复无效,pip安装后再修复可运行。

2.问题二 TypeError: pic should be Tensor or ndarray

项目场景:

Python3.7 云平台 pytorch torchvision
在深度学习使用torchvision.datasets.ImageFolder(train_path, train_transformer)载入数据时

问题描述:

报错主要是TypeError: pic should be Tensor or ndarray. Got .
也就是图片未被转换成Tensor,或者是ndarray,而现在我们需要Tesnsor。

Traceback (most recent call last):
  File "mnt/Projects/baseline_cloud/src/train_model.py", line 281, in <module>
    main(parser.parse_args())
  File "mnt/Projects/baseline_cloud/src/train_model.py", line 183, in main
    train_model(model, criterion, args, optimizer, train_loader, valid_loader)
  File "mnt/Projects/baseline_cloud/src/train_model.py", line 212, in train_model
    trainer.train(train_loader, optimizer)
  File "/mnt/Projects/baseline_cloud/src/utils/trainers.py", line 31, in train
    for i, inputs in enumerate(data_loader, 1):
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 517, in __next__
    data = self._next_data()
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 557, in _next_data
    data = self._dataset_fetcher.fetch(index)  # may raise StopIteration
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/mnt/Projects/baseline_cloud/src/utils/preprocessor.py", line 19, in __getitem__
    return self._get_single_item(indices)
  File "/mnt/Projects/baseline_cloud/src/utils/preprocessor.py", line 23, in _get_single_item
    img_path, label = self.img_paths_label[index]
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torchvision/datasets/folder.py", line 180, in __getitem__
    sample = self.transform(sample)
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torchvision/transforms/transforms.py", line 60, in __call__
    img = t(img)
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torchvision/transforms/transforms.py", line 179, in __call__
    return F.to_pil_image(pic, self.mode)
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torchvision/transforms/functional.py", line 219, in to_pil_image
    raise TypeError('pic should be Tensor or ndarray. Got {}.'.format(type(pic)))
TypeError: pic should be Tensor or ndarray. Got <class 'PIL.Image.Image'>.

原因分析:

torchvision.datasets.ImageFolder(train_path, train_transformer)主要是使用transformer将PILImage转换成了Tensor,但是我自定义的transformer为:
train_transformer = T.Compose([
        T.ToPILImage(),
        T.RandomHorizontalFlip(),  # 水平翻转
        T.RandomRotation(10),  # 随机旋转10度
        T.ToTensor(),
        normalizer,
    ])

可以看到最后一步是将前面的数据转成Tensor。
所以怀疑是T.ToPILImage()出现问题,画蛇添足了。去掉T.ToPILImage()后能成功。


解决方案:

一般是Transformer转换步骤有问题,transformer中没有T.ToTensor(),加上此语句。如果存在重复步骤(像如我的T.ToPILImage())去掉。

3.问题三 Pentaho与mysql驱动

问题描述:

Pentaho按照Pentaho的下载与安装及其简单实用安装后连接mysql时报错。

1.显示缺少驱动
下载mysql对应驱动复制到data-integration\lib下即可
mysql5.1.47connector
版本问题参考MySQL 5.7 等高版本关于JDBC驱动的几个问题

2.显示错误
The last packet successfully received from the server was 2 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.

部分参考Communications link failure 原因:The last packet successfully received from the server

这个问题是我碰到的问题,mysql5.7.32,驱动选择5.1.47是报错,后来想到当时是使用installers安装的全套,所以找到C:\Program Files (x86)\MySQL\Connector J 8.0,将mysql-connector-java-8.0.22.jar复制到data-integration\lib然后下一步

3.继续报错
Connection failed. Verify all connection parameters and confirm that the appropriate driver is installed. The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

可能是笔记本的时区与 kettle 框架有冲突,显示无法识别和保持多个时区,在命令行运行

mysql -u root -p

输入密码登录后,设置时区

show variables like '%time_zone%';

set global time_zone='+8:00';

原因分析:

总结还是驱动和mysql的设置问题

解决方案:

参考上述

四.问题四 矩池云jupyter数据集多出无关目录

问题描述:

多出目录致使判断表情类别时数组越界。

解决方案:

多出的目录为系统自带.ipynb_checkpoints,可以到每个分类目录下,使用cd .i +TAB键补全的方式 判断是否存在该目录,有的话rm -rf .ipynb_checkpoints删除

Thanks

你可能感兴趣的:(python,python,bug)