如果发生UnicodeEncodeError,是否可以删除文件?

时间:2019-05-02 20:02:04

标签: python-3.x

下面的代码遍历列表中的每个.m4v文件,并使用FFmpeg将其转换为.wav文件,并且可以正常工作。我使用python 3 jupyter环境。

for fpath in list:
    if (fpath.endswith(".m4v")):
        cdir=os.path.dirname(fpath)
        os.chdir(cdir)
        filename=os.path.basename(fpath)
        os.system("ffmpeg -i {0} temp_name.wav".format(filename))
        ofnamepath=os.path.splitext(fpath)[0]
        temp_name=os.path.join(cdir, "temp_name.wav")
        new_name = os.path.join(ofnamepath+'.wav')
        os.rename(temp_name,new_name)
        old_name=os.path.join(ofnamepath+'.m4v')
        os.remove(old_name)

但是,对于这个特定的数据集,我得到以下错误;


> UnicodeEncodeError                        Traceback (most recent call
> last) <ipython-input-10-bd3b17e409fa> in <module>()
>      
> 
> >  7         os.chdir(cdir)
> >       8         filename=os.path.basename(fpath)
> > ----> 9         os.system("ffmpeg -i {0} temp_name.wav".format(filename))
> >      10         ofnamepath=os.path.splitext(fpath)[0]
> >      11         temp_name=os.path.join(cdir, "temp_name.wav")
> 
> UnicodeEncodeError: 'ascii' codec can't encode characters in position
> 10-16: ordinal not in range(128)

是否可以在代码中添加if注释行?

 if 'UnicodeEncodeError: 'ascii' codec can't encode'

删除该文件并继续下一个文件?

1 个答案:

答案 0 :(得分:0)

您可以使用tryexcept块。

如果在try块中发生异常,它将跳到exception块。更好的是,您甚至可以指定例外。

将其添加到您的代码中将类似于:

for fpath in list:
    if (fpath.endswith(".m4v")):
        cdir=os.path.dirname(fpath)
        os.chdir(cdir)
        filename=os.path.basename(fpath)
        try:
            os.system("ffmpeg -i {0} temp_name.wav".format(filename))
        except UnicodeEncodeError:
            print("Some failure message.. Continuing to next..")
            # os.remove(filename)
            continue  # This skips the rest of the current iteration and jumps to the top of the loop. 
        ofnamepath=os.path.splitext(fpath)[0]
        temp_name=os.path.join(cdir, "temp_name.wav")
        new_name = os.path.join(ofnamepath+'.wav')
        os.rename(temp_name,new_name)
        old_name=os.path.join(ofnamepath+'.m4v')
        os.remove(old_name)

取消注释# os.remove(filename)以删除文件。您确定要永久删除它们吗?