key=12
head=851
file_pdf='pdf'
s=new_folder+'/'+file_pdf+'/'+'%s-%s.'+file_pdf+'heu'%(str(key),str(head),)
回溯(最近一次呼叫最后一次):文件"",第1行,in TypeError:不是在字符串格式化期间转换的所有参数
这有什么问题?为什么我收到字符串格式错误。我给了两个参数和两个格式说明符。我做了一切都没有一个元组,但仍然没有工作。
答案 0 :(得分:1)
请参阅下文,了解使用os.path.join()
构建文件路径的更好方法。
对于直接问题,元组中的2个参数仅与最后一个字符串'heu'
相关联。这是因为%
的运算符优先级高于+
。因为'heu'
中没有格式说明符,您会收到错误:
key=12
head=851
file_pdf='pdf'
>>> 'heu' % (str(key), str(head),)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
您需要确保在插值发生之前评估字符串的其他组件。你可以用括号做到这一点:
>>> s = (new_folder + '/' +file_pdf + '/' + '%s-%s.' + file_pdf + 'heu') % (str(key), str(head),)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'new_folder' is not defined
因此未指定new_folder
:
>>> new_folder = 'blah'
>>> s = (new_folder + '/' +file_pdf + '/' + '%s-%s.' + file_pdf + 'heu') % (str(key), str(head),)
>>> print(s)
blah/pdf/12-851.pdfheu
或者您可以将元组直接应用于所需的字符串:
>>> s = new_folder + '/' +file_pdf + '/' + '%s-%s.' % (str(key), str(head),) + file_pdf + 'heu'
现在,考虑到你实际上要做的事情,你可能最好使用os.path.join()
将各个部分放在一起:
>>> import os.path
>>> s = os.path.join(new_folder, file_pdf, '%s-%s.%sheu' % (key, head, file_pdf))
>>> print(s)
blah/pdf/12-851.pdfheu