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

Python使用raise報錯拋出異常顯示Unicode碼的解決方法

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

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

1. 問題重現(xiàn)

1.1 示例代碼

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

import json

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

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

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

1.2 運行結果

運行上述代碼后,控制臺輸出:

捕獲到異常: {"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 中的“正文編號排序異常”被顯示為 \u6b63\u6587...
  • detail_msg 中的中文也被轉義為 Unicode 編碼。

2. 問題原因

2.1json.dumps()默認行為

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

2.2 控制臺打印時的顯示

  • 當我們 print(Exception(...)) 或捕獲異常后打印時,Python 會調用 str() 方法,而 Exceptionstr() 方法會直接顯示 json.dumps() 的結果(包含 Unicode 轉義)。
  • 因此,控制臺看到的是 \u6b63\u6587...,而不是直接顯示中文。

3. 解決方案

3.1 方法 1:使用ensure_ascii=False

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

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

運行結果

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

優(yōu)點

  • 直接顯示中文,可讀性高。
  • 保留 JSON 結構的機器可讀性。

適用場景:需要異常信息既可讀又可被程序解析時。

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

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

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

運行結果

錯誤信息: 正文編號排序異常

缺點

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

3.3 方法 3:直接構造錯誤信息(避免 JSON 轉換)

如果錯誤信息不需要 JSON 結構,可以直接用字符串拼接:

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

運行結果

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

優(yōu)點

  • 簡單直接,無需 JSON 轉換。
  • 適用于錯誤信息不需要機器解析的場景。

缺點:丟失 JSON 結構,不利于程序化處理。

4. 最佳實踐

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

推薦方案

  • 優(yōu)先使用 ensure_ascii=False,因為它既保留了 JSON 結構,又讓中文直接顯示。
  • 如果錯誤信息不需要 JSON 結構,可以直接用字符串拼接。

5. 總結

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

解決方案

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

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

6. 完整代碼示例

import json

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

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

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

運行結果

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

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

相關文章

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

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

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

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

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

    python函數(shù)的默認參數(shù)請勿定義可變類型詳解

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

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

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

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

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

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

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

    關于Python中字符串的各種操作

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

    python實操案例練習(八)

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

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

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

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

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

最新評論

清苑县| 红河县| 武山县| 海南省| 宁波市| 安岳县| 于田县| 浑源县| 巢湖市| 洛阳市| 三亚市| 呼玛县| 余江县| 介休市| 南通市| 广丰县| 新竹县| 肃北| 长治县| 华坪县| 洛宁县| 宣武区| 积石山| 漳州市| 宜兰县| 永泰县| 嘉峪关市| 新竹市| 富民县| 泰兴市| 宜章县| 项城市| 东港市| 红安县| 五台县| 吴堡县| 滨海县| 微山县| 绥阳县| 顺义区| 苏尼特左旗|