You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyDroid3中使用match语法报错,求原因分析与替代方案

关于PyDroid3中match语法报错的问题与解决方案

问题描述

我正在尝试创建一个使用match语法的待办事项列表,编写的代码如下:

while True:
    user_action = input("Type add, show, edit, or exit: ")
    user_action = user_action.strip()

    match user_action:
        case "add":
            todo = input("Enter a todo: ")
            todos.append(todo)
            file = open("todos.txt", "w")
            file.writelines(todos)

运行后出现如下报错:

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
    start(fakepyfile,mainpyfile)
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
    exec(open(mainpyfile).read(),  __main__.__dict__)
  File "<string>", line 7
    match user_action:
          ^
SyntaxError: invalid syntax

怀疑PyDroid3不支持match语法,作为编程新手,想了解是否存在疏漏,以及是否有可行的替代方案。

问题原因

  1. 版本不兼容:Python的match-case模式匹配是Python 3.10及以上版本才新增的特性,若你的PyDroid3内置Python版本低于3.10,就会触发语法错误。
  2. 代码疏漏:原代码中todos变量未提前初始化,即便解决版本问题,运行时也会抛出NameError。

可行的替代方案

方案1:升级PyDroid3的Python版本

打开PyDroid3进入设置,找到Python版本选项,升级到3.10或更高版本,即可直接使用match-case语法。同时修复代码中的疏漏,补充完整功能:

todos = []  # 初始化待办列表
while True:
    user_action = input("Type add, show, edit, or exit: ")
    user_action = user_action.strip()

    match user_action:
        case "add":
            todo = input("Enter a todo: ")
            todos.append(todo)
            # 用with语句自动管理文件,避免漏关文件
            with open("todos.txt", "w") as file:
                # 每个待办单独写入一行,避免内容粘连
                file.writelines(f"{item}\n" for item in todos)
        case "show":
            if todos:
                for idx, item in enumerate(todos, 1):
                    print(f"{idx}. {item}")
            else:
                print("No todos yet.")
        case "edit":
            if todos:
                try:
                    idx = int(input("Enter the number of the todo to edit: ")) - 1
                    if 0 <= idx < len(todos):
                        new_todo = input("Enter new todo: ")
                        todos[idx] = new_todo
                        with open("todos.txt", "w") as file:
                            file.writelines(f"{item}\n" for item in todos)
                    else:
                        print("Invalid todo number.")
                except ValueError:
                    print("Please enter a valid number.")
            else:
                print("No todos to edit.")
        case "exit":
            print("Goodbye!")
            break
        case _:
            print("Invalid command. Please type add, show, edit, or exit.")

方案2:用if-elif-else替代match-case

如果暂时无法升级版本,传统的条件判断完全可以实现相同功能,兼容性更强:

todos = []  # 初始化待办列表
while True:
    user_action = input("Type add, show, edit, or exit: ")
    user_action = user_action.strip()

    if user_action == "add":
        todo = input("Enter a todo: ")
        todos.append(todo)
        with open("todos.txt", "w") as file:
            file.writelines(f"{item}\n" for item in todos)
    elif user_action == "show":
        if todos:
            for idx, item in enumerate(todos, 1):
                print(f"{idx}. {item}")
        else:
            print("No todos yet.")
    elif user_action == "edit":
        if todos:
            try:
                idx = int(input("Enter the number of the todo to edit: ")) - 1
                if 0 <= idx < len(todos):
                    new_todo = input("Enter new todo: ")
                    todos[idx] = new_todo
                    with open("todos.txt", "w") as file:
                        file.writelines(f"{item}\n" for item in todos)
                else:
                    print("Invalid todo number.")
            except ValueError:
                print("Please enter a valid number.")
        else:
            print("No todos to edit.")
    elif user_action == "exit":
        print("Goodbye!")
        break
    else:
        print("Invalid command. Please type add, show, edit, or exit.")

内容的提问来源于stack exchange,提问作者ricoNomad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:05:31