如何设置Python异常消息使用我的本地语言?

7

我正在开发一款Python库,将用于巴西市场,该地区的官方语言是葡萄牙语!基本上,我想获得葡萄牙语的异常信息,例如:

而不是获取...

>>> float('A')
ValueError: could not convert string to float: A

我希望能够获取这个...

>>> float('A')
ValueError: não é possível converter a string para um float: A

有没有办法做到这一点?

你可以使用 tryexcept 语句,然后显示你自己的(葡萄牙语)消息。 - Bas Jansen
1
@BasJansen 是的,我可以做到,但是说实话,我不想这么做。我提供的代码只是问题的一小部分,还有很多种异常类型需要我处理...所以,我想知道是否有一种简单的方法可以解决这个问题,而不需要编写大量的代码将英文异常转换为葡萄牙语异常。 - Hugo Corrá
2
@BasJansen,你本质上是在要求Hugo Corra重写Python中的所有错误信息。有没有更简单的方法来做到这一点? - Snakes and Coffee
@SnakesandCoffee 我可能误读了,我以为他想要一个特定的葡萄牙语异常而不是全部。如果目标是所有错误,使用 except 绝对不是正确的方法。然而,我认为 Python 强烈反对 这种程度的本地化。 - Bas Jansen
这似乎是在葡萄牙语中重写Python。 - thavan
显示剩余2条评论
3个回答

6
CPython 实现没有提供任何自动本地化错误消息的方法。因此,您应该将所有 Python 错误消息重写为葡萄牙语,并添加大量的 try...except 块或替换 sys.excepthook 来处理异常。
如果您计划这样做,我建议使用 gettext 模块进行本地化。
其他 Python 实现(如 IronPython)有本地化的错误消息。
在我看来,您想要做的不是一个好的实践。这些巴西开发人员必须要知道一些英语,以便查看一些 Python/库的文档(这些文档可能并没有全部翻译成葡萄牙语)。
此外,如果本地化错误消息,那么在网上搜索它们会变得更加困难。

4
好的观点,但是当本地化程序面向最终用户时,本地化错误消息是一个好主意。用户不需要知道英语,并且 IOError 的 repr() 不是一种不好的方式,可以告诉用户在程序写入它时他的外部硬盘已经被断开连接了。 - Fábio Santos
这涉及到一个重要的设计问题:异常是否应该携带人性化信息?人性化的错误信息自然而然地建议将这些消息显示给最终用户,那么对于异常消息进行本地化是有意义的。人性化的错误信息看起来并不仅仅是为了指导开发人员(或者在必要时用于异常处理代码,代替或补充定义我们的异常自定义类,并可能设置异常属性)。 - mtraceur
如果我们想要明确开发人员不应该养成向最终用户公开这些错误的习惯,那么我们可能需要在一些特定的方面尽力使异常信息变得更加不适合最终用户——比如使用程序员英语而非自然英语(省略或缩写单词,就像我们在变量、函数和类名中所做的那样),故意将错误信息以对非开发人员来说奇怪/难懂的格式呈现,但对熟悉的开发人员来说仍然容易阅读等。 - mtraceur

2

Python的默认语言是英语,我们一直被鼓励使用它(根据PEP 8的规定)。

因此,据我所知,他们不支持/鼓励像这样使用不同的语言,所以你可能需要自己改变所有内容。


2
Python(实际上是CPython)目前没有国际化错误消息。2012年,Mariano Reingart在bug报告#16344中提出了这个问题,称之为“Traceback Internationalization Proposal”。经过大量讨论,他们同意在进一步讨论之前,必须推进这个PEP草案,因此该错误在2015年关闭。也许您可以参与到这个bug报告或Python Dev邮件列表中,并发表您的意见,以引起对这个主题的兴趣,还可以联系Reingart并查询有关此问题的当前状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接