欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用kombu連接信息中包含#號問題排查方式

 更新時間:2024年12月24日 09:31:39   作者:Chengdu.S  
文章描述了在部署Python項目到生產環(huán)境時遇到的一個錯誤,即端口號無法正確轉換為整數(shù)值,該錯誤在測試環(huán)境和本地調試中沒有出現(xiàn),但在生產環(huán)境中才出現(xiàn),通過分析錯誤信息和代碼,作者發(fā)現(xiàn)問題出在URL解析過程中,特別是在處理包含特殊字符(如#號)的URL時

python 項目部署生產環(huán)境遇到一個錯誤問題:

raise ValueError(f"Port could not be cast to integer value as {port!r}") ValueError: Port could not be cast to integer value as 'guest

測試環(huán)境和本地調試都沒有問題,但是到生產之后就有問題,本章復現(xiàn)有問題的mq連接配置的導致的錯誤信息,記錄問題排查過程

版本信息

框架版本
python3.11.7
kombu5.3.4

環(huán)境搭建

python 虛擬環(huán)境

Python 虛擬環(huán)境(Virtual Environment)是一個隔離的 Python 解釋器環(huán)境,它允許你為每個 Python 項目安裝其特定的依賴包,而不會干擾到全局 Python 環(huán)境或其他項目。

這樣,你可以確保每個項目都有其獨立的、一致的依賴環(huán)境,避免了版本沖突和依賴混亂的問題。

Python 中有幾個流行的工具用于創(chuàng)建和管理虛擬環(huán)境,其中最常用的是 venv 和 virtualenv

venv 創(chuàng)建 python 虛擬環(huán)境

python -m venv .venv

執(zhí)行該命令之后,會創(chuàng)建一個虛擬的環(huán)境,產生 .venv文件夾, 目錄結構如下

激活虛擬環(huán)境

.venv\Scripts\activate

激活虛擬環(huán)境之后,文件夾前面會有括號顯示虛擬環(huán)境的名稱

退出虛擬環(huán)境

deactivate

虛擬環(huán)境下查看python、pip版本

查詢pip 配置信息

(.venv) F:\Python\mq>pip config list
global.index-url='http://mirrors.aliyun.com/pypi/simple/'
install.trusted-host='mirrors.aliyun.com'

安裝依賴

編寫 requirements.txt

kombu==5.3.4

在虛擬環(huán)境里面安裝依賴

pip install -r requirements.txt

問題復現(xiàn)以及問題排查

1.消息發(fā)布端 hello_publisher.py

from __future__ import annotations

import datetime

from kombu import Connection

with Connection('amqp://guest:guest#2024@localhost:5672//') as conn:
    simple_queue = conn.SimpleQueue('simple_queue')
    message = f'helloworld, sent at {datetime.datetime.today()}'
    simple_queue.put(message)
    print(f'Sent: {message}')
    simple_queue.close()

2.在虛擬環(huán)境運行代碼

出現(xiàn)如下報錯信息

(.venv) F:\Python\mq>python hello_publisher.py
Traceback (most recent call last):
  File "F:\Python\mq\hello_publisher.py", line 7, in <module>
    with Connection('amqp://guest:guest#2024@localhost:5672//') as conn:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\connection.py", line 203, in __init__
    url_params = parse_url(hostname)
                 ^^^^^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 38, in parse_url
    scheme, host, port, user, password, path, query = _parse_url(url)
                                                      ^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 70, in url_to_parts
    parts.port,
    ^^^^^^^^^^
  File "E:\Anaconda\Lib\urllib\parse.py", line 182, in port
    raise ValueError(f"Port could not be cast to integer value as {port!r}")
ValueError: Port could not be cast to integer value as 'guest'

看到報錯的堆棧信息,首先定位到代碼行

File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 70 

在此處加一個斷點,調試一下(生產服務不能調試就print輸出一下信息)

3.調試出問題的代碼

報錯的代碼方法如下

def url_to_parts(url):
    # type: (str) -> urlparts
    """Parse URL into :class:`urlparts` tuple of components."""
    scheme = urlparse(url).scheme
    schemeless = url[len(scheme) + 3:]
    # parse with HTTP URL semantics
    parts = urlparse('http://' + schemeless)
    path = parts.path or ''
    path = path[1:] if path and path[0] == '/' else path
    return urlparts(
        scheme,
        unquote(parts.hostname or '') or None,
        parts.port,
        unquote(parts.username or '') or None,
        unquote(parts.password or '') or None,
        unquote(path or '') or None,
        dict(parse_qsl(parts.query)),
    )

parts.port 獲取的值從 urlparse 方法中解析出來的

執(zhí)行完 urlparse 方法之后獲取到的數(shù)值如下

port 的解析在 urlparse 這一步出了問題,重點來看看這個方法的邏輯

經過調試發(fā)現(xiàn)問題出在切割方法里面 urllib.parse.urlsplit,具體處理出問題代碼在如下片段

鏈接中有 # 號導致切割之后端口號錯位未獲取到

去除鏈接中的#號的正常解析的數(shù)據(jù)如下

鏈接中沒有 # 號之后,端口可以正常解析了

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python根據(jù)輸入?yún)?shù)計算結果的實例方法

    Python根據(jù)輸入?yún)?shù)計算結果的實例方法

    在本篇文章里小編個大家整理了一篇關于Python根據(jù)輸入?yún)?shù)計算結果的實例方法,有興趣的朋友們可以跟著學習參考下。
    2021-08-08
  • 對python中的iter()函數(shù)與next()函數(shù)詳解

    對python中的iter()函數(shù)與next()函數(shù)詳解

    今天小編就為大家分享一篇對python中的iter()函數(shù)與next()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python中new方法的詳解

    Python中new方法的詳解

    今天小編就為大家分享一篇關于Python中new方法的詳解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • python flask框架快速入門

    python flask框架快速入門

    Flask 本身相當于一個內核,其他幾乎所有的功能都要用到擴展,都需要用第三方的擴展來實現(xiàn),本文給大家分享如何快速入門python flask框架,感興趣的朋友一起看看吧
    2021-05-05
  • python dir函數(shù)快速掌握用法技巧

    python dir函數(shù)快速掌握用法技巧

    在本篇文章里小編給大家整理的是一篇關于python dir函數(shù)快速掌握用法技巧,有興趣的朋友們可以學習參考下。
    2020-12-12
  • python連接手機自動搜集螞蟻森林能量的實現(xiàn)代碼

    python連接手機自動搜集螞蟻森林能量的實現(xiàn)代碼

    這篇文章主要介紹了python連接手機自動搜集螞蟻森林能量的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python如何生成textgrid文件

    python如何生成textgrid文件

    這篇文章主要介紹了python如何生成textgrid文件,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Python 遍歷循環(huán)詳細

    Python 遍歷循環(huán)詳細

    這篇文章主要介紹的是Python 遍歷循環(huán),遍歷循環(huán)可理解為從遍歷結構中逐一提取元素,放在循環(huán)變量中,對于所提取的每個元素執(zhí)行一次語句塊。由保留字for和in組成,完整遍歷所有元素后結束每次循環(huán),所獲得元素放入循環(huán)變量,并執(zhí)行一次語句塊,下面就來看文章介紹
    2021-10-10
  • Python?Opencv實現(xiàn)圖片切割處理

    Python?Opencv實現(xiàn)圖片切割處理

    這篇文章主要為大家詳細介紹了Python?Opencv實現(xiàn)圖片切割處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python多進程并行代碼實例

    python多進程并行代碼實例

    這篇文章主要介紹了python多進程并行代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論