【问题标题】:Python 3 not raising exception for invalid file namePython 3 不会为无效文件名引发异常
【发布时间】:2019-06-27 18:09:06
【问题描述】:

如何让 Python 在打开文件名无效的文件时引发异常?例如,我有这个代码

def write_html_to_file(set_name, pid, html_text):
    if not os.path.exists(HTML_DUMP_DIR_NAME):
        os.makedirs(HTML_DUMP_DIR_NAME)
        path = (HTML_DUMP_DIR_NAME + set_name + '-' + pid + '.html')
    try:
        with open(path, "w+", encoding='utf-8') as html_dump_file:
            html_dump_file.write(html_text)
    except OSError as e:
        logging.basicConfig(filename=LOG_FILE_PATH, level=logging.ERROR)
        logging.error('Failed to create html dump. '
                      + ' error=' + e
                      + ' file_name=' + path)

假设path的值为'Folder1/SubFolder/Some Title: thing.html',该文件还不存在。

我期望 Python 会使用 Invalid Arguments 或类似的东西引发 OSerror实际发生的情况是它创建了一个名为 'Folder1/Subfolder/Some Title' 的文件。 注意文件名在无效字符处停止

我知道我可以创建自己的异常,如果我检测到无效名称,我可以引发这些异常,但在这种情况下,这是没有意义的。我只关心我是否试图在操作系统级别做一些无效的事情。在这种情况下,它似乎默默地失败了,我不喜欢那样。

编辑:抱歉,我想我的问题不清楚。

  • 确实希望它创建一个文件,这让我很高兴。
  • 问题是创建的文件名停止在 无效字符。我希望整个名字都在那里。
  • 我的问题是,为什么 python 不引发异常,所以我可以 遇到无效字符时处理

【问题讨论】:

  • 在 Python 中创建文件还有什么其他方法?
  • 您正在创建一个新文件;你为什么期望它抱怨,因为它还不存在。
  • 如果os.path.exists(HTML_DUMP_DIR_NAME) 为真,此代码将引发NameError,因为从未分配过path。不知何故,我怀疑这不是真正的代码。
  • “文件不存在”和“文件名无效的文件”是完全不同的东西。
  • 不要使用w+,它会在它不存在时创建一个新文件。

标签: python python-3.x windows exception


【解决方案1】:

事实证明(感谢 eryksun),特别是您传递给 open() 的字符串中的 ':' 实际上是 NTFS 系统上的分隔符,表示您要写入多个数据流:

我的代码适用于文件名中无效的任何其他字符(例如*)。所以我想出的解决方案是将文件名中的任何':' 替换为-,然后再将其传递给open()

base_file_name= base_file_name.replace(':', '-')

':'s 在文件名中无论如何都是无效的,所以这对我来说很好。

【讨论】:

    猜你喜欢
    • 2016-03-22
    • 2016-12-15
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多