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

如何在Python中不使用chr()将Pygame按键码转换为ASCII字符?

解决Pygame按键码转ASCII字符时的范围错误问题

问题场景

你编写的Pygame键盘输入程序中,尝试用chr()将按键码转换为ASCII字符,但部分功能键(比如Caps Lock)的按键码超出chr()的处理范围,会抛出以下错误:

ValueError: chr() arg not in range(0x110000)

原代码如下:

key = 0
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    if event.type == pygame.KEYDOWN:
        for key in keys:
            if event.key == key:
                key = key
                if key != None:
                    print(key)
                    print(chr(key))
                    return chr(key)
                else:
                    return

可行解决方案

方法一:提前判断按键码范围

先检查按键码是否在chr()的有效区间(0 ≤ key ≤ 0x10FFFF),不在范围内则返回占位符或跳过:

key = 0
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    if event.type == pygame.KEYDOWN:
        for key in keys:
            if event.key == key:
                current_key = event.key
                if 0 <= current_key <= 0x10FFFF:
                    char = chr(current_key)
                    print(current_key, char)
                    return char
                else:
                    print(f"按键 {current_key} 无法转换为ASCII字符")
                    return None

方法二:用try-except捕获异常

直接尝试转换,捕获ValueError并处理异常情况:

key = 0
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    if event.type == pygame.KEYDOWN:
        for key in keys:
            if event.key == key:
                current_key = event.key
                try:
                    char = chr(current_key)
                    print(current_key, char)
                    return char
                except ValueError:
                    print(f"按键 {current_key} 无法转换为ASCII字符")
                    return None

方法三:结合Pygame按键名称函数

对于功能键,用pygame.key.name()获取按键名称,可打印字符则用chr()转换,兼顾两种场景:

key = 0
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    if event.type == pygame.KEYDOWN:
        for key in keys:
            if event.key == key:
                current_key = event.key
                try:
                    char = chr(current_key)
                    print(current_key, char)
                    return char
                except ValueError:
                    key_name = pygame.key.name(current_key)
                    print(current_key, key_name)
                    return key_name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:16