首页 > 解决方案 > 带有开放式添加反斜杠的 Python kivy,在替换时抛出无效参数

问题描述

我正在尝试在我的 kivy 应用程序中打开一个文本文件。代码如下:

class kivyx(MDApp):
    def __init__(self, *args, **kwargs):
        self.theme_cls.theme_style = "Light"
        super().__init__(**kwargs)

    message = StringProperty('Drop Test')
        
    def build(self):
        Window.bind(on_dropfile=self.on_file_drop)
        print("MDlabel")
        return MDLabel(text=self.message, halign="center")

    def on_file_drop(self, window, file_path):
        self.message = str(file_path)
        path = str(file_path)[1:]
        getPath(path)

        return MDLabel(text=self.message, halign="center")

def getPath(path):
    print(path)
    with open(path.replace("\\\\", "/"), "r") as f:
        print(f.read())

kivyx().run()

这是我的回应:

MDlabel
[INFO   ] [Base        ] Start application main loop
'C:\\AMFTrace.log'
[INFO   ] [Base        ] Leaving application in progress...
 Traceback (most recent call last):
   File "d:/dev/SpectrumX/kivyx.py", line 33, in <module>
     kivyx().run()
   File "C:\Users\tkulk\AppData\Local\Programs\Python\Python38\lib\site-packages\kivy\app.py", line 950, in run
     runTouchApp()
   File "C:\Users\tkulk\AppData\Local\Programs\Python\Python38\lib\site-packages\kivy\base.py", line 572, in runTouchApp
     EventLoop.mainloop()
   File "C:\Users\tkulk\AppData\Local\Programs\Python\Python38\lib\site-packages\kivy\base.py", line 349, in mainloop
     self.window.mainloop()
   File "C:\Users\tkulk\AppData\Local\Programs\Python\Python38\lib\site-packages\kivy\core\window\window_sdl2.py", line 575, in mainloop
     self.dispatch('on_dropfile', dropfile[0])
   File "kivy\_event.pyx", line 705, in kivy._event.EventDispatcher.dispatch
   File "kivy\_event.pyx", line 1248, in kivy._event.EventObservers.dispatch
   File "kivy\_event.pyx", line 1172, in kivy._event.EventObservers._dispatch
   File "d:/dev/SpectrumX/kivyx.py", line 24, in on_file_drop
     getPath(path)
   File "d:/dev/SpectrumX/kivyx.py", line 30, in getPath
     with open(path.replace("\\\\", "/"), "r") as f:
 OSError: [Errno 22] Invalid argument: "'C:/AMFTrace.log'"

这在 python 解释器中有效,但是当我使用时它添加了四个反斜杠:

with open(path, "r") as f:

所以我添加了替换。可能是什么问题?

当我直接定义路径时它也有效,

with open("C:/AMFTrace.log", "r") as f:

但这并不重要,因为两者都是类型

<class 'str'>

标签: pythonfilekivy

解决方案


我以某种方式以带有单引号的形式获取路径 - 请注意打印输出包含引号,并且错误消息包含两组引号。使用 [1:][:-1] 切片引号解决了它。


推荐阅读