我有一个问题,希望这里的任何人都看到了类似的东西。看起来像是一个遍历字符串列表的循环,返回一个数据来源未知的元组。
我使用PyCharm作为IDE。只有在调试模式下执行代码时才会发生错误。
我有以下代码。
from multiprocessing import Process, Manager, Pool, Queue, Lock
import fnmatch
def find(_pat_set:set, _path:str, _ignore_pat: set = None, _exclude_path_set: set = None):
if _exclude_path_set is None:
_exclude_path_set = set()
if _ignore_pat is None:
_ignore_pat = set()
manager = Manager()
files_dict = manager.dict()
for root, dirs, files in os.walk(_path):
_ex_dir_set = set()
_full_dir_list = []
for _dir in dirs:
_full_dir = os.path.join(root, _dir)
_full_dir_list.append(_full_dir)
for _ex_dir in _exclude_path_set:
_filtered = list(fnmatch.filter(_full_dir_list, _ex_dir))
for f in _filtered:
_ex_dir_set.add(os.path.basename(f))
dirs[:] = sorted(list(set(dirs) - _ex_dir_set))
_searched_files = []
for _pat in _pat_set:
_searched_files += list(fnmatch.filter(files, _pat))
_ignore_files = []
for _ig_pat in _ignore_pat:
_ignore_files += list(fnmatch.filter(files, _ig_pat))
_parse_files = set(_searched_files) - set(_ignore_files)
files_dict[root] = dict((f, {}) for f in _parse_files)
return files_dict
def main():
exclude_set = {'*\\.*',
'*\\syn\\*',
'*\\tmp',
'*\\temp',
'*\\__pycache__'}
_files = find(_pat_set={'*'}, _path='c:\\work\\git_project\\project', _ignore_pat={'*.rpt', '.*', '*.sdc'}, _exclude_path_set=exclude_set)
if __name__ == '__main__':
main()
print('done')
这是一个查找例程,用于定位文件和文件夹,并构建一个共享字典,稍后在线程之间共享。
问题出在以下代码段:
for _dir in dirs:
_full_dir = os.path.join(root, _dir)
当我执行我的代码时,它从代码的一部分中得到以下错误
File "C:\Python310\lib\ntpath.py", line 143, in join
genericpath._check_arg_types('join', path, *paths)
File "C:\Python310\lib\genericpath.py", line 152, in _check_arg_types
raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'tuple'
当我在调试窗口中查看时,
dirs = ['.git', '.settings', 'interface', 'scripts', 'tmp', 'tst_sw']
但for值“_dir”包含以下内容
_dir = ('c:\\work\\git_project\\project\\.git', ['hooks', 'info', 'lfs', 'logs', 'modules',
'objects', 'refs'], ['COMMIT_EDITMSG', 'config', 'description', 'FETCH_HEAD',
'gitk.cache', 'HEAD', 'index', 'ORIG_HEAD', 'packed-refs', 'sourcetreeconfig.json'])
所有这些数据从何而来?它应该只包含字符串
_dir '.git'
如果代码仅在调试模式下正常执行,则没有问题。
我希望有人以前看过这个,我不知道我是否可以给予更多的信息。
问候
1条答案
按热度按时间xam8gpfp1#
我发现了问题,但没有答案或原因,为什么它会导致一个问题。
我在这一行添加了一个条件断点:
它在上面一行生成的字符串中有一个搜索条件
断点条件如下所示。
我不知道什么或什么,但显然它会导致一些干扰的名单,这是有趣的,虽然。
删除断点解决了问题。