Python 3没有引发无效文件名的异常

时间:2019-02-03 23:46:13

标签: python python-3.x windows exception

我如何让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将使用无效参数或类似的参数引发OSerror实际发生的情况是它创建了一个名为'Folder1/Subfolder/Some Title'的文件。 注意文件名以无效字符结尾

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

编辑:对不起,我想我的问题不清楚。

  • 愿意做它来创建一个文件,这一点我很高兴。
  • 问题在于,创建的文件名停止 无效字符。我希望有整个名字。
  • 我的问题是,为什么python不引发异常,所以我可以 遇到无效字符时进行处理

1 个答案:

答案 0 :(得分:2)

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

我的代码对于文件名无效的任何其他字符(例如,*)都可以正常工作。因此,我想出的解决方案是在将文件名中的任何':'传递给-

之前,用open()替换它。
base_file_name= base_file_name.replace(':', '-')

':'的文件名仍然无效,所以这对我来说很好。