为什么os.path.join()命令在两种情况下的行为不同?



我在Jupyterlab的一个大代码中有os.path.join命令。我放了一个try-except块&发现它没有加入任何东西。但是,当我将相同的命令放在单独的Jupyterlab笔记本中时,它会正常连接。为什么如此?请给我点光。

My path is'./tmp/deeptest-trpo/'

def get_monitor_files(path: str) -> List[str]:

##print(path) gives ./tmp/deeptest-trpo/ i.e. without the ''. Is this the cause?
try:
os.path.join(path, "*" + "monitor.csv")
except:
print('not joining')  #always reaches here

return glob(os.path.join(path, "*" + "monitor.csv"))

但是当我单独操作时,它工作正常!

import os
pathh='./tmp/deeptest-trpo/'
os.path.join(pathh, "*" + "monitor.csv")

###OUTPUT IS'./tmp/deeptest-trpo/*monitor.csv'

如果有帮助的话,这个get_monitor_files是一个内置函数。我提取了其中的一部分来分析上述差异。

在M1 mac上使用python 3.8.9,我没有得到任何错误:

def get_monitor_files(path: str) -> 'list[str]':
try:
p = os.path.join(path, "*" + "monitor.csv")
except Exception as e:
print(e)
else:
print(p)

get_monitor_files("./tmp/deeptest-trpo/")

,它打印./tmp/deeptest-trpo/*monitor.csv没有问题。我将处理异常,这样您就可以看到哪里出了问题。

编辑:从上面复制我的评论:我的猜测是变量path虽然类型暗示为字符串,但实际上并没有作为字符串传递,当您尝试在"*"和变量path上使用+运算符时,这不是字符串,它失败了。但这是一个完整的猜测,没有看到错误。

最新更新