bug寶典python篇no,Python經典問題

本文目錄一覽:

python調試程序BUG的心得技巧分享

【導讀】相信各位Python工程師們在寫Python代碼的時候,免不了經常會出現bug滿天飛這種情況,這個時候我們可能就得一個標點一個標點的去排查,費時又費力,但是,我們又很難發現到底是其中的哪一個步驟,導致了這些問題的出現。導致這些問題的其中一個原因,就是我們沒有養成良好的編程習慣。編程習慣就好比是電影中的特效。電影特效越好,呈現出來的觀影效果也自然越好。同樣,如果我們能夠養成好的編程習慣,在查找錯誤的時候,自己的思路就會更加清晰。下面是小編整理的解決Python項目bug的心得技巧分享,包含六小點,希望對大家有所幫助。

方法一:使用項目管理工具

無論Python項目簡單與否,我們都應該使用Git進行版本控制。大部分支持Python的IDE(集成開發環境)都內置了對Git這一類項目管理工具的支持。

我們在修改代碼時,常常會出現改著改著程序就崩了的情況,改出的最新版本有時候還不如上一個版本。而Git,恰好能夠及時幫我們保存之前的版本。使用了它以後,我們也不需要不停地用「ctrl+z」來撤回代碼了。

方法二:使用Python的內置函數

Python的內置函數和標準庫都可以處理常見的用例,而不需要自己重新定義函數。

但是,剛剛入門的Python開發人員們對其中的函數並不熟悉。所以他們經常會遇到這樣一個問題——在不需要記住內容的情況下,如何才能知道標準庫中的內容是否涵蓋了自己的用例?最簡單的方法是將標準庫索引和內置函數概述頁添加為書籤,並且在遇到「日常編程」類問題的時候立即瀏覽一下。我們使用這些函數的頻率高了,自然也就能記住這些函數了。

方法三:使用正確的模塊

與內置函數和標準庫一樣,Python中大量的第三方模塊集合,也可以幫助我們節省大量的人力。通過PyPI的Web前端,可以針對我們的問題觸發搜索詞,我們很容易就能找到適合自己的解決方案。

方法四:使用OOP

面向對象編程(OOP)將數據結構與用於操作它們的方法捆綁在一起,從而使編寫高級代碼更加容易。OOP非常適合用於Python這一類高級語言,尤其是項目非常複雜的時候。熟悉Python的開發人員都知道,使用OOP可以減少代碼量,從而節省大量的時間。

但是,也不是所有的項目都需要使用OOP。如果項目沒有特別要求,一些小型的項目就可以不用OOP。

方法五:編寫測試代碼並不斷測試

一個好的程序員一定知道測試之於項目的重要性。編寫測試代碼的確是一個很枯燥的過程,但是不進行測試,我們就無法發現程序的問題所在。

如果一個項目非常複雜的話,我們就必須要做到及時測試。越早測試,就能越早發現問題。而不是說等代碼全部寫完了,才開始進行測試,這樣反而會導致更多的錯誤和更大的工作量。

當然,我們也可以尋找專業的軟體測試人員,來幫助我們進行測試。這樣我們也可以把更多的精力投入到項目程序本身。

方法六:選擇正確的Python版本

部分人仍然在使用Python2,但Python官方的開發團隊早已經不對這一版本進行維護了。聰明的開發人員都已經將Python2里的項目遷移到Python3中了。

Python目前的最新版本是Python3.8.5,但也不是說你一定要使用最新版本。專業的軟體開發人員都知道,任何軟體的最新版本都不一定是最好的,因為它仍需要開發團隊不斷地去改良。程序員一般都會使用在最新版本之前的一個版本,舊版本相對而言是比較成熟的。

無論是運用哪一種語言編寫代碼,優秀的程序員都具備良好的編程習慣。這些習慣不僅能夠讓我們思路更加清晰,也可以幫助我們減輕工作量,從而節省大量的時間。所以,可能你離優秀的程序員,只差一個好習慣了哦~

以上就是小編今天給大家整理髮送的關於「解決Python項目BUG的心得技巧分享」的相關內容,希望對大家有所幫助。小編認為要想在大數據行業有所建樹,需要考取部分含金量高的數據分析師證書,這樣更有核心競爭力與競爭資本。

《Python寶典》txt下載在線閱讀全文,求百度網盤雲資源

《Python寶典》(楊佩璐/宋強)電子書網盤下載免費在線閱讀

鏈接:

提取碼:rbpu  

書名:《Python寶典》

作者:楊佩璐/宋強

譯者:

豆瓣評分:

出版社:電子工業出版社

出版年份:2014-5

頁數:504

內容簡介:Python是目前流行的腳本語言之一。《Python寶典》由淺入深、循序漸進地為讀者講解了如何使用Python進行編程開發。《Python寶典》內容共分三篇,分為入門篇、高級篇和案例篇。入門篇包括Python的認識和安裝、開發工具簡介、Python基本語法、數據結構與演算法、多媒體編程、系統應用、圖像處理和GUI編程等內容。高級篇包括用Python操作資料庫、進行Web開發、網路編程、科學計算、多線程編程等內容。案例篇選擇了3個案例演示了Python在Windows系統優化、大數據處理和遊戲開發方面的應用。

《Python寶典》針對Python的常用擴展模塊給出了詳細的語法介紹,並且給出了典型案例,通過對《Python寶典》的學習,讀者能夠很快地使用Python進行編程開發。

《Python寶典》適合Python初學者、程序設計人員、編程愛好者、本科及大專院校學生,以及需要進行對科學的計算的工程人員閱讀。

python代碼bug求解

錯誤在於下一次迭代時,n會變成下一個奇數5,

而18行的代碼通過傳遞參數n鎖定了n值

可以通過輸出一些log查看:

以下代碼通過把lambda展開成普通函數,並輸出調用filter函數的參數來查看,比較一下就能明白了。

def _not_divisible(n):

 def func(x):

  print(“!!!!!!!!!!!!!”)

  print(x, n)

  return x % n  0

 return func

def primes():

 yield 2

 print(1111)

 it = _odd_iter()

 while True:

  n = next(it)

  print(2222)

  yield n

  def func(x):

   print(“!!!!!!!!!!!!!”)

   print(x, n)

   return x % n  0

  it = filter(func, it)

  #it = filter(_not_divisible(n), it)

Python中的bug有多可怕?

明敏 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

到底是怎樣的一個bug,能讓95%的Pytorch庫中招,就連特斯拉AI總監深受困擾?

還別說,這個bug雖小,但有夠「狡猾」的。

這就是最近Reddit上熱議的一個話題,是一位網友在使用再平常不過的Pytorch+Numpy組合時發現。

最主要的是,在代碼能夠跑通的情況下,它甚至還會影響模型的準確率!

除此之外,網友熱議的另外一個點,竟然是:

而是它到底算不算一個bug?

這究竟是怎麼一回事?

事情的起因是一位網友發現,在PyTorch中用NumPy來生成隨機數時,受到數據預處理的限制,會多進程並行載入數據,但最後每個進程返回的隨機數卻是相同的。

他還舉出例子證實了自己的說法。

如下是一個示例數據集,它會返回三個元素的隨機向量。這裡採用的批量大小分別為2,工作進程為4個。

然後神奇的事情發生了:每個進程返回的隨機數都是一樣的。

這個結果會著實讓人有點一頭霧水,就好像數學應用題求小明走一段路程需要花費多少時間,而你卻算出來了負數。

發現了問題後,這位網友還在GitHub上下載了超過10萬個PyTorch庫,用同樣的方法產生隨機數。

結果更加令人震驚:居然有超過95%的庫都受到這個問題的困擾!

這其中不乏PyTorch的官方教程和OpenAI的代碼,連特斯拉AI總監Karpathy也承認自己「被坑過」!

但有一說一,這個bug想要解決也不難:只需要在每個epoch都重新設置seed,或者用python內置的隨機數生成器就可以避免這個問題。

到底是不是bug?

如果這個問題已經可以解決,為什麼還會引起如此大的討論呢?

因為網友們的重點已經上升到了「哲學」層面:

這到底是不是一個bug?

在Reddit上有人認為:這不是一個bug。

雖然這個問題非常常見,但它並不算是一個bug,而是一個在調試時不可以忽略的點。

就是這個觀點,激起了千層浪花,許多人都認為他忽略了問題的關鍵所在。

這不是產生偽隨機數的問題,也不是numpy的問題,問題的核心是在於PyTorch中的DataLoader的實現

對於包含隨機轉換的數據載入pipeline,這意味著每個worker都將選擇「相同」的轉換。而現在NN中的許多數據載入pipeline,都使用某種類型的隨機轉換來進行數據增強,所以不重新初始化可能是一個預設。

另一位網友也表示這個bug其實是在預設程序下運行才出現的,應該向更多用戶指出來。

並且95%以上的Pytorch庫受此困擾,也絕不是危言聳聽。

有人就分享出了自己此前的慘痛經歷:

我認識到這一點是之前跑了許多進程來創建數據集時,然而發現其中一半的數據是重複的,之後花了很長的時間才發現哪裡出了問題。

也有用戶補充說,如果 95% 以上的用戶使用時出現錯誤,那麼代碼就是錯的。

順便一提,這提供了Karpathy定律的另一個例子:即使你搞砸了一些非常基本代碼,「neural nets want to work」。

你有踩過PyTorch的坑嗎?

如上的bug並不是偶然,隨著用PyTorch的人越來越多,被發現的bug也就越來越多,某乎上還有PyTorch的坑之總結,被瀏覽量高達49w。

其中從向量、函數到model.train(),無論是真bug還是自己出了bug,大家的血淚史還真的是各有千秋。

所以,關於PyTorch你可以分享的經驗血淚史嗎?

歡迎評論區留言討論~

參考鏈接:

[1]

[2]

[3]

— 完 —

python編程bug

“””

if rname == ‘ipython console’ or rname.endswith(‘string’):

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xca in position 38: ordinal not in range(128)

“””

似乎rname是一個unicode的串, 在與”ipython consone”, “string” 進行比較時先進行了轉換,但其中包含非ascii字元導致轉換異常的問題。

建議簡單地改成:

if rname == u’ipython console’ or rname.endswith(u’string’):

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271939.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 00:07
下一篇 2024-12-17 00:07

相關推薦

發表回復

登錄後才能評論