最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用raise報(bào)錯(cuò)拋出異常顯示Unicode碼的解決方法

 更新時(shí)間:2026年04月03日 08:28:55   作者:detayun  
在 Python 開發(fā)中,我們經(jīng)常使用 raise 拋出異常來處理錯(cuò)誤情況,但有時(shí)候,異常信息中的中文或其他非 ASCII 字符會(huì)被顯示為 Unicode 轉(zhuǎn)義序列,下面我們就來看看如何解決吧

在 Python 開發(fā)中,我們經(jīng)常使用 raise 拋出異常來處理錯(cuò)誤情況。但有時(shí)候,異常信息中的中文或其他非 ASCII 字符會(huì)被顯示為 Unicode 轉(zhuǎn)義序列(如 \u6b63\u6587),而不是直接顯示中文(如“正文”)。這不僅影響可讀性,還可能讓調(diào)試變得困難。本文將詳細(xì)分析這個(gè)問題,并提供解決方案。

1. 問題重現(xiàn)

1.1 示例代碼

假設(shè)我們有一個(gè)函數(shù) check_paragraph_order(),用于檢查文檔段落編號(hào)是否正確排序。如果發(fā)現(xiàn)異常,則拋出異常并附帶錯(cuò)誤信息:

import json

def get_paragraph_info():
    # 模擬返回段落信息(包含中文)
    return {
        "type": "paragraph",
        "index": 179,
        "content": "(1)建設(shè)業(yè)務(wù)經(jīng)營:形成“國內(nèi)+國際+新基建”三輪驅(qū)動(dòng);",
        "label": ["正文"]
    }

def check_paragraph_order():
    paragraph_info = get_paragraph_info()
    # 模擬檢查失敗,拋出異常
    raise Exception(json.dumps({
        'error_msg': '正文編號(hào)排序異常',
        'detail_msg': paragraph_info
    }))

try:
    check_paragraph_order()
except Exception as e:
    print(f"捕獲到異常: {e}")

1.2 運(yùn)行結(jié)果

運(yùn)行上述代碼后,控制臺(tái)輸出:

捕獲到異常: {"error_msg": "\u6b63\u6587\u7f16\u53f7\u6392\u5e8f\u5f02\u5e38", "detail_msg": {"type": "paragraph", "index": 179, "content": "\uff081\uff09\u5efa\u8bbe\u4e1a\u52a1\u7ecf\u8425\uff1a\u5f62\u6210\u201c\u56fd\u5185+\u56fd\u9645+\u65b0\u57fa\u5efa\u201d\u4e09\u8f6e\u9a71\u52a8\uff1b", "label": ["\u6b63\u6587"]}}

可以看到:

  • error_msg 中的“正文編號(hào)排序異常”被顯示為 \u6b63\u6587...。
  • detail_msg 中的中文也被轉(zhuǎn)義為 Unicode 編碼。

2. 問題原因

2.1json.dumps()默認(rèn)行為

  • json.dumps() 是 Python 中將字典轉(zhuǎn)換為 JSON 字符串的方法。
  • 默認(rèn)情況下json.dumps() 會(huì)將所有非 ASCII 字符(如中文、日文、韓文等)轉(zhuǎn)義為 Unicode 編碼(如 \u6b63)。
  • 這是 JSON 規(guī)范的一部分,目的是確保 JSON 字符串在所有環(huán)境中都能安全傳輸(避免編碼問題)。

2.2 控制臺(tái)打印時(shí)的顯示

  • 當(dāng)我們 print(Exception(...)) 或捕獲異常后打印時(shí),Python 會(huì)調(diào)用 str() 方法,而 Exceptionstr() 方法會(huì)直接顯示 json.dumps() 的結(jié)果(包含 Unicode 轉(zhuǎn)義)。
  • 因此,控制臺(tái)看到的是 \u6b63\u6587...,而不是直接顯示中文。

3. 解決方案

3.1 方法 1:使用ensure_ascii=False

最簡(jiǎn)單的方法是在 json.dumps() 中添加參數(shù) ensure_ascii=False,強(qiáng)制保留非 ASCII 字符(如中文):

raise Exception(json.dumps({
    'error_msg': '正文編號(hào)排序異常',
    'detail_msg': get_paragraph_info()
}, ensure_ascii=False))

運(yùn)行結(jié)果

捕獲到異常: {"error_msg": "正文編號(hào)排序異常", "detail_msg": {"type": "paragraph", "index": 179, "content": "(1)建設(shè)業(yè)務(wù)經(jīng)營:形成“國內(nèi)+國際+新基建”三輪驅(qū)動(dòng);", "label": ["正文"]}}

優(yōu)點(diǎn)

  • 直接顯示中文,可讀性高。
  • 保留 JSON 結(jié)構(gòu)的機(jī)器可讀性。

適用場(chǎng)景:需要異常信息既可讀又可被程序解析時(shí)。

3.2 方法 2:手動(dòng)解析 JSON 字符串(不推薦)

如果無法修改 json.dumps() 的調(diào)用,可以捕獲異常后手動(dòng)解析 JSON 字符串:

try:
    check_paragraph_order()
except Exception as e:
    error_json = str(e)  # 獲取 JSON 字符串(含 Unicode)
    error_dict = json.loads(error_json)  # 解析 JSON 回字典
    print(f"錯(cuò)誤信息: {error_dict['error_msg']}")  # 直接訪問中文字段

運(yùn)行結(jié)果

錯(cuò)誤信息: 正文編號(hào)排序異常

缺點(diǎn)

  • 代碼冗余,需要額外解析 JSON。
  • 僅適用于簡(jiǎn)單場(chǎng)景,不推薦廣泛使用。

3.3 方法 3:直接構(gòu)造錯(cuò)誤信息(避免 JSON 轉(zhuǎn)換)

如果錯(cuò)誤信息不需要 JSON 結(jié)構(gòu),可以直接用字符串拼接:

def check_paragraph_order():
    paragraph_info = get_paragraph_info()
    error_msg = f"正文編號(hào)排序異常,詳情: {paragraph_info}"
    raise Exception(error_msg)

運(yùn)行結(jié)果

捕獲到異常: 正文編號(hào)排序異常,詳情: {'type': 'paragraph', 'index': 179, 'content': '(1)建設(shè)業(yè)務(wù)經(jīng)營:形成“國內(nèi)+國際+新基建”三輪驅(qū)動(dòng);', 'label': ['正文']}

優(yōu)點(diǎn)

  • 簡(jiǎn)單直接,無需 JSON 轉(zhuǎn)換。
  • 適用于錯(cuò)誤信息不需要機(jī)器解析的場(chǎng)景。

缺點(diǎn):丟失 JSON 結(jié)構(gòu),不利于程序化處理。

4. 最佳實(shí)踐

方案適用場(chǎng)景推薦指數(shù)
json.dumps(..., ensure_ascii=False)需要異常信息既可讀又可被程序解析?????
手動(dòng)解析 JSON 字符串無法修改 json.dumps() 調(diào)用??
直接構(gòu)造錯(cuò)誤信息錯(cuò)誤信息不需要 JSON 結(jié)構(gòu)???

推薦方案

  • 優(yōu)先使用 ensure_ascii=False,因?yàn)樗缺A袅?JSON 結(jié)構(gòu),又讓中文直接顯示。
  • 如果錯(cuò)誤信息不需要 JSON 結(jié)構(gòu),可以直接用字符串拼接。

5. 總結(jié)

問題原因json.dumps() 默認(rèn)轉(zhuǎn)義非 ASCII 字符(如中文)為 Unicode 編碼。

解決方案

  1. ensure_ascii=False(推薦):強(qiáng)制保留中文,直接顯示。
  2. 手動(dòng)解析 JSON(不推薦):適用于無法修改源碼的情況。
  3. 直接構(gòu)造字符串:適用于簡(jiǎn)單錯(cuò)誤信息。

最佳實(shí)踐:優(yōu)先使用 ensure_ascii=False,兼顧可讀性和機(jī)器可解析性。

6. 完整代碼示例

import json

def get_paragraph_info():
    return {
        "type": "paragraph",
        "index": 179,
        "content": "(1)建設(shè)業(yè)務(wù)經(jīng)營:形成“國內(nèi)+國際+新基建”三輪驅(qū)動(dòng);",
        "label": ["正文"]
    }

def check_paragraph_order():
    paragraph_info = get_paragraph_info()
    # 使用 ensure_ascii=False 保留中文
    raise Exception(json.dumps({
        'error_msg': '正文編號(hào)排序異常',
        'detail_msg': paragraph_info
    }, ensure_ascii=False))

try:
    check_paragraph_order()
except Exception as e:
    print(f"捕獲到異常: {e}")

運(yùn)行結(jié)果

捕獲到異常: {"error_msg": "正文編號(hào)排序異常", "detail_msg": {"type": "paragraph", "index": 179, "content": "(1)建設(shè)業(yè)務(wù)經(jīng)營:形成“國內(nèi)+國際+新基建”三輪驅(qū)動(dòng);", "label": ["正文"]}}

到此這篇關(guān)于Python使用raise報(bào)錯(cuò)拋出異常顯示Unicode碼的解決方法的文章就介紹到這了,更多相關(guān)Python raise報(bào)錯(cuò)顯示Unicode碼解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中plt.imshow(image)無法顯示圖片的解決

    Python中plt.imshow(image)無法顯示圖片的解決

    這篇文章主要介紹了Python中plt.imshow(image)無法顯示圖片的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 如何用Python生成二維碼、解析二維碼

    如何用Python生成二維碼、解析二維碼

    這篇文章主要介紹了如何用Python生成二維碼、解析二維碼,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python函數(shù)的默認(rèn)參數(shù)請(qǐng)勿定義可變類型詳解

    python函數(shù)的默認(rèn)參數(shù)請(qǐng)勿定義可變類型詳解

    這篇文章主要介紹了python函數(shù)的默認(rèn)參數(shù)請(qǐng)勿定義可變類型詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 從運(yùn)行效率與開發(fā)效率比較Python和C++

    從運(yùn)行效率與開發(fā)效率比較Python和C++

    今天小編就為大家分享一篇關(guān)于從運(yùn)行效率與開發(fā)效率比較Python和C++,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Python利用字典破解WIFI密碼的方法

    Python利用字典破解WIFI密碼的方法

    今天小編就為大家分享一篇關(guān)于Python利用字典破解WIFI密碼的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python跨文件使用全局變量的實(shí)現(xiàn)

    python跨文件使用全局變量的實(shí)現(xiàn)

    本文主要介紹了python跨文件使用全局變量的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 關(guān)于Python中字符串的各種操作

    關(guān)于Python中字符串的各種操作

    本文將重點(diǎn)介紹Python字符串的各種常用方法,字符串是實(shí)際開發(fā)中經(jīng)常用到的,所有熟練的掌握它的各種用法顯得尤為重要。需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • python實(shí)操案例練習(xí)(八)

    python實(shí)操案例練習(xí)(八)

    這篇文章主要介紹了python實(shí)操案例練習(xí),本篇文章主要分享的案例內(nèi)容有記錄用戶登錄日志、模擬淘寶客服自動(dòng)回復(fù),下面詳細(xì)的內(nèi)容,需要的小伙伴可以參考一下。希望對(duì)你有所幫助
    2022-02-02
  • Python lambda函數(shù)基本用法實(shí)例分析

    Python lambda函數(shù)基本用法實(shí)例分析

    這篇文章主要介紹了Python lambda函數(shù)基本用法,結(jié)合實(shí)例較為詳細(xì)的分析了Python lambda函數(shù)的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-03-03
  • 如何利用Python寫猜數(shù)字和字母的游戲

    如何利用Python寫猜數(shù)字和字母的游戲

    這篇文章主要介紹了如何利用Python寫猜數(shù)字和字母的游戲,文章基于Python實(shí)現(xiàn)游戲小項(xiàng)目,感興趣的朋友可以參考一下
    2022-07-07

最新評(píng)論

平远县| 稷山县| 呈贡县| 浮梁县| 林周县| 通江县| 紫金县| 黄石市| 怀柔区| 德阳市| 永吉县| 洛阳市| 玉门市| 清流县| 祁阳县| 汉沽区| 浠水县| 尼勒克县| 尼勒克县| 巴彦县| 诏安县| 当涂县| 个旧市| 镇康县| 宝兴县| 扶风县| 迁西县| 大厂| 峨边| 曲沃县| 芜湖市| 苏尼特右旗| 乌拉特前旗| 潞西市| 江安县| 雷山县| 宜昌市| 稷山县| 水富县| 永吉县| 天长市|