gpt4 book ai didi

python - 如何引发包含 Unicode 字符串的异常?

转载 作者:太空狗 更新时间:2023-10-29 20:49:39 25 4
gpt4 key购买 nike

我正在使用 Unicode 字符串编写 Python 2 代码,导入 unicode_literals,但我遇到了引发异常的问题。

# -*- coding: utf-8 -*-

from __future__ import unicode_literals

raise Exception('Tést')

执行此操作时,“Tést”字符串会从终端中剥离。

我可以解决这个问题

raise Exception('Tést'.encode('utf-8'))

我宁愿找到一个全局解决方案,也不愿在所有 raise Exception 语句中都这样做。

(由于我在异常消息中使用了 PyQt 的 tr() 函数,所以必须处理特殊字符,我无法在编码时知道 encode('utf-8' ) 是必要的。)

更糟。有时,我想捕获一个异常,获取它的消息,并引发一个新的异常,将一个基本字符串与第一个异常字符串连接起来。

我必须这样做:

try:
raise TypeError('Tést'.encode('utf-8'))
except Exception as e:
raise Exception('Exception: {}'.format(str(e).decode('utf-8')).encode('utf-8'))

但我真的希望它能不那么麻烦(这个例子甚至不包括 self.tr() 调用)。

有没有更简单的方法?

(附带一个问题,使用 Python3 会更简单吗?Exception 可以使用 unicode 字符串吗?)

最佳答案

感谢问题下方的评论,我想到了这个。

想法是使用自定义异常子类。

# -*- coding: utf-8 -*-

from __future__ import unicode_literals

class MyException(Exception):

def __init__(self, message):

if isinstance(message, unicode):
super(MyException, self).__init__(message.encode('utf-8'))
self.message = message

elif isinstance(message, str):
super(MyException, self).__init__(message)
self.message = message.decode('utf-8')

# This shouldn't happen...
else:
raise TypeError

def __unicode__(self):

return self.message

class MySubException(MyException):
pass

try:
raise MyException('Tést')
except MyException as e:
print(e.message)
raise MySubException('SubException: {}'.format(e))

关于python - 如何引发包含 Unicode 字符串的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29096702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com