脚本使用os.path但不使用pathlib(SIGTRAP)

时间:2017-12-04 21:23:15

标签: python

我被建议利用Python 3.6中的pathlib模块,因为我正在Linux上设计一个脚本,该脚本将在Windows机器上用于生产。

pathlib确实看起来很有希望,但是我的os模块代码效果很好:

class Watcher:
    DIRECTORY_TO_WATCH = os.path.join(os.path.expanduser("~"), 'Dropbox', 'credits_hd_jobs')

    print(DIRECTORY_TO_WATCH)

    def __init__(self):
        self.observer = Observer()


    def run(self):
        event_handler = Handler()
        self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=False)
        self.observer.start()

如果我改为pathlib等价物:

from pathlib import Path as p

class Watcher:
    DIRECTORY_TO_WATCH = p.joinpath(p.home(), 'Dropbox', 'credits_hd_jobs/')
    print(DIRECTORY_TO_WATCH)

    def __init__(self):
        self.observer = Observer()


    def run(self):
        event_handler = Handler()
        self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=False)
        self.observer.start()

80%我会在Pycharm中收到此错误:

  

处理以退出代码133结束(由信号5中断:SIGTRAP)

或脚本将运行,但我的触发器根本不会触发。混乱。

1 个答案:

答案 0 :(得分:0)

确定。我找到了解决方案:

os.path.join(os.path.expanduser("~"), 'Dropbox', 'credits_hd_jobs')

返回str,而:

p.joinpath(p.home(), 'Dropbox', 'credits_hd_jobs/')

返回PosixPath

我最后使用str()将后者作为字符串进行投射,尽管这看起来很难看。我保持这个问题的开放性以获得更好的答案。