由于if逻辑错误,函数未返回值

约0

使用一个小脚本从给定的绝对路径(可以是Win和linux)中提取文件名。该脚本应该抓取存储路径的文件(每行一个),并使用pathlib提取文件名。但是,pathlib存在路径以斜杠-/或\结束的问题。我有一个功能“ remove_slash”,该功能应以递归方式删除所有尾随的斜杠。

  • 第一个奇怪的问题是它总是进入我认为是由EOL符号引起的else块
  • 其次,当路径中没有尾部斜杠时,它将进入“ if” vlock,并应返回格式化路径,但不会。我想弄清楚为什么没有返回价值的原因。

如果有经验的人可以看看一下,并指出正确的方向。

有大量用于调试目的的打印,请丢弃。

#!/usr/bin/python3

from pathlib import Path,PurePath
import sys

# Function which removes trailing slash
# if there is no slash at the end - return path
# else run this function with the slice
def remove_slash(path):
    print(f"Entering with : {path}")
    if path[-1].isalnum():
        print(f"iffffff {path[-1].isalnum()}::::{path[-1]} ::: {path}")
        return path   # **THIS NEVER GETS RETURNED**
    else:
        print(f"else : {path}")
        remove_slash(path[:len(path)-1])

if len(sys.argv) ==1 or len(sys.argv)>2:
    print(f"Usage : {sys.argv[0]} filename") 
    sys.exit(1)

File = sys.argv[1]

with open(File) as F:
    for path_line in F:
        print("==========================")
        print(f"path before : {path_line}")
        path_line = path_line.replace('\\','/')

        path_line = remove_slash(path_line)
        print(f"path after : {path_line}")
        p = PurePath(str(path_line))
        print(f"part  : {p.name}")
        #p.parts
print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
print(remove_slash('//home//python//projects//files.py////'))

#print(f"+++++++++++++++++++ {str(qqq)}")
约翰·安德森

remove_slash是递归的,而递归调用则不返回任何内容。因此,在递归堆栈下的某个位置,将返回正确的字符串,但是在下一级上不返回任何内容,因此None实际的返回是。只需在您的else区块中添加退货

def remove_slash(path):
    print(f"Entering with : {path}")
    if path[-1].isalnum():
        print(f"iffffff {path[-1].isalnum()}::::{path[-1]} ::: {path}")
        return path   # **THIS NEVER GETS RETURNED**
    else:
        print(f"else : {path}")
        return remove_slash(path[:len(path)-1])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章