Python 备忘录

1. 根目录和子目录同时确保import

在hello目录下执行infer.py,运行ok
在main.py中调用infer.py,提示infer.py中的导入有问题

代码: https://share.weiyun.com/DFHBym4g

解决方法:在main.py中,把sys.path里添加各个子目录。

import sys
sys.path.insert(1, 'xxx')

ref: https://stackoverflow.com/a/61311572/2999096

2. 不知道/忘记numpy的contiguous引发的segfault

ZTQ基于pybind封装了landmark库,封装后模块叫做afd。afd的输入是np.ndarray类型,也就是opencv的python接口imread读取后的类型。简单测试正常可以用。

某天发现,imread后的图像,做两次rotate,再调用afd,报segfault错。

排查了一番,发现im的flags中的contiguous等字段有区别。

im = cv2.imread('xxx.jpg')
im = np.rot90(im, k=2)
# im = im + 0  # 如果有这句话,则im变为contiguous
# 或者, im = numpy.ascontiguousarray(im),则消除segfault
res = afd(im)

3. 字符串并不是你看到的字符串

比如这个文件fuck.py,里面16行和17行,看起来内容一样,直觉觉得用它们其中任意一个,运行结果都一样

# coding: utf-8
from datetime import datetime, timedelta
class TimeUtil(object):
    fmt = '%Y_%m_%d-%H_%M_%S_%f'

    @staticmethod
    def datetime_to_timestamp(src_time):
        timestamp = src_time.strftime(TimeUtil.fmt)[:-3] # 去掉结尾3个0,也就是去掉微秒
        return timestamp

    @staticmethod
    def timestamp_to_datetime(timestamp):
        cur_time = datetime.strptime(timestamp, TimeUtil.fmt)
        return cur_time

#end_timestamp = '2020_08_13-11_12_36_000'
end_timestamp = '‏‎2020_08_13-11_12_36_000'
end_time = TimeUtil.timestamp_to_datetime(end_timestamp)
print(end_time)

然而实际运行,用了第二个end_timestamp,会报错:

比较一下?VSCode并不提示有啥区别啊:

如果是vimdiff则能明显看出区别:

beyond compare和VSCode类似,虽然识别出不同,但并未标出来区别:

而winmerge的显示,除了默认字体很挫需要自己改一下之外,这个区别的显示还是比较明显的:

原文地址:https://www.cnblogs.com/zjutzz/p/13447157.html