Kivy on android:parser.py中的异常create_missing:TypeError:参数'name'的类型不正确(预期str,得到unicode)

时间:2018-01-28 13:23:04

标签: android python kivy kivy-language

我的Kivy应用程序立即在Android上崩溃。 我想这是一些Python2 / Python3不兼容,但我不知道这个错误的实际原因是什么(adb logcat输出):

01-28 14:00:39.421  7457  7492 I python  :    File "/home/kivy/Pfadfinder/.buildozer/android/app/main.py", line 5, in <module>
01-28 14:00:39.421  7457  7492 I python  :    File "/home/kivy/Pfadfinder/.buildozer/android/platform/build/dists/pfadfinder/private/lib/python2.7/site-packages/kivy/app.py", line 802, in run**strong text**
01-28 14:00:39.421  7457  7492 I python  :    File "/home/kivy/Pfadfinder/.buildozer/android/app/pfadfinder/hauptmenue.py", line 152, in build
01-28 14:00:39.422  7457  7492 I python  :    File "/home/kivy/Pfadfinder/.buildozer/android/platform/build/dists/pfadfinder/private/lib/python2.7/site-packages/kivy/lang/builder.py", line 382, in load_string
01-28 14:00:39.422  7457  7492 I python  :    File  "/home/kivy/Pfadfinder/.buildozer/android/platform/build/dists/pfadfinder/private/lib/python2.7/site-packages/kivy/lang/builder.py", line 496, in _apply_rule
01-28 14:00:39.422  7457  7492 I python  :    File "/home/kivy/Pfadfinder/.buildozer/android/platform/build/dists/pfadfinder/private/lib/python2.7/site-packages/kivy/lang/parser.py", line 281, in create_missing
01-28 14:00:39.423  7457  7492 I python  :  TypeError: Argument 'name' has incorrect type (expected str, got unicode)

该应用程序是在Windows上使用Python 3.6开发的。

在Android上,它在Python 2.7.2(Kivy v1.10.0)中运行。

注意:我是德国人,所以该应用程序应该与umlautsäöü一起使用。 我正在加载KV文件:

def build(self):
    with io.open(os.path.join(THIS_DIR, "hauptmenue.kv"), encoding='utf-8') as f:
       screen_management = Builder.load_string(f.read())

最后一行是堆栈跟踪中提到的第152行。

KV文件如下所示:

:kivy 1.1.0

ScreenManagement:
    hauptmenue: hauptmenue
    MainMenu:
        id: hauptmenue

<LevelButton>:
    font_size: "40dp"


<MainMenu>:
    name: "hauptmenue"

    level_auswahl: level_auswahl

    BoxLayout:
        orientation: "vertical"
        size: root.size

        Label:
            text: "Pfadfinder"
            size_hint: (1.0, None)
            font_size: "30dp"
            height: "40dp"

        GridLayout:
            id: level_auswahl
            rows: 6
            cols: 5

        BoxLayout:
            orientation: "horizontal"
            size_hint: (1.0, None)
            height: "40dp"
            Button:
                text: "Einstellungen"
                on_release: app.open_settings()
                font_size: "30dp"
            Button:
                text: "Beenden"
                on_release: app.stop()
                font_size: "30dp"

<Einstellungen>:
    name: "einstellungen"
    Settings:
        on_close: app.close_settings()

1 个答案:

答案 0 :(得分:0)

我会回答我自己的问题。

错误消息确实不是很有用,所以我试着记住自上一个工作版本以来发生的变化。

加载KV文件的方法没有改变 - 这就像前几天一样 - 原因是KV文本中的变音符号在Windows上无法正确呈现。

我添加了屏幕管理,应用配置和JsonStore,例如对于玩家的昵称。 当然我用这个名字的变音符号,所以我认为这些是罪魁祸首。 但这是错误的。

原因实际上是我在KV文件中有一个“名称”属性。

实际上,有助于修改以Python版本相关的方式加载KV文件的方法:

fname = os.path.join(THIS_DIR, "hauptmenue.kv")
if sys.version_info[0] >= 3:
    with io.open(fname, encoding='utf-8') as f:
        screen_management = Builder.load_string(f.read())
else:
    screen_management = Builder.load_file(fname)

希望这有助于其他人......