當前位置:首頁 » 編程語言 » python361

python361

發布時間: 2022-04-25 11:44:00

① track python 361度

java">trackback在Python中非常有用,它可以顯示出現異常(Exception)時代碼執行棧的情況。但當我們捕捉異常,一般是自已的出錯處理,因此代碼執行棧的信息就看不到了,如果還想顯示的話,就要用到traceback模塊了。
這里只是簡單的對traceback模塊的介紹,不是一個完整的說明,而且只是滿足我個人的要求,更詳細的還是要看文檔。
列印完整的traceback
讓我們先看一個traceback的顯示:
>>>1/0
Traceback(mostrecentcalllast):
File「「,line1,in-toplevel-
1/0
ZeroDivisionError:integerdivisionormolobyzero
可以看出Python預設顯示的traceback有一個頭:第一行,出錯詳細位置:第二、三行,異常信息:第四行。也就是說分為三部分,而在traceback可以分別對這三部分進行處理。不過我更關心完整的顯示。
在traceback中提供了print_exc([limit[,file]])函數可以列印出與上面一樣的效果。limit參數是限定代碼執行棧的條數,file參數可以將traceback信息輸出到文件對象中。預設的話是輸出到錯誤輸出中。舉例:
>>>try:
1/0
except:
traceback.print_exc()

Traceback(mostrecentcalllast):
File「「,line2,in?
ZeroDivisionError:integerdivisionormolobyzero
當出現異常sys.exc_info()函數會返回與異常相關的信息。如:
>>>try:
1/0
except:
sys.exc_info()
(<classexceptions.ZeroDivisionErrorat0×00BF4CC0>,<exceptions.ZeroDivisionErrorinstanceat0×00E29DC8>,<tracebackobjectat0×00E29DF0>)
sys.exc_info()返回一個tuple,異常類,異常實例,和traceback。
print_exc()是直接輸出了,如果我們想得到它的內容,如何做?使用format_exception(type,value,tb[,limit]),type,value,tb分別對應sys.exc_info()對應的三個值。如:
>>>try:
1/0
except:
type,value,tb=sys.exc_info()
printtraceback.format_exception(type,value,tb)
['Traceback(mostrecentcalllast): ','File"",line2,in? ','ZeroDivisionError:integerdivisionormolobyzero ']
這樣,我們知道了format_exception返回一個字元串列表,這樣我們就可以將其應用到我們的程序中了。

② python的庫,方法這么多,寫程序的時候能記住嗎

這就是平時的工作方式。vim寫python,沒安裝其他插件,但有自己的配置文件。
常見的項目所常用的函數很難超過50個。大量的業務函數一旦被寫出來就是負責直接處理業務,而不會被其他部分調用,這些是不需要背的。
再把自己寫的共享函數庫整理好,往往常用函數不到10個。應用模塊里引用框架級別的函數也就是二三十個的級別。加上數據中間層,設計好規范後,能背下來必要的數據表就能聯想到對應的介面。
所以,一個不過2萬行代碼的python項目。實際需要背的函數也就是50個左右。
過百贊我就分析個實際項目。
-- 1小時的分割線 --
補充個我當前公司所開發的一個小型項目。相當於是一個網站,以及給客戶端軟體提供ajax api的伺服器。一共10個python文件。4357行。以下逐個文件分析,但不會暴露實際代碼。

1. rtb.py:75行,程序啟動文件,其內的多種調用基本上就是一錘子的,即可以參考文檔寫完,但項目其他地方不會被使用,且作為啟動文件,其本身也不會被引用。該文件的主要作用就是引用一大堆其他應用的模塊,做URL分派。我因為在項目里同時使用了web.py和flask,所以多花了一點代碼來做WSGI兼容兩個框架的支持。
2. setting.py:56行,設置文件,也可以理解為一錘子的,而且通用性更強,每次開個新的項目,大可以把以前的配置文件抄過來,只修改必要的部分就可以用了。僅有的兩處小技巧是 socket.gethostname()獲得機器名後區分配置文件的環境,用以避免上線時的混亂。以及獲得設置文件的當前絕對路徑,供其他路徑相關的操作:
CURPATH=os.path.normpath(os.path.join(os.getcwd(),os.path.dirname(__file__)))
3. shareutil.py:275行,web.py框架相關的自定義共享庫,給各個應用模塊提供相關支持。所以這里的函數是需要背下來的,在其他模塊里比較常用的。比較常用的就是登錄驗證相關的:
1. BasicAuthError:自定義的異常用來強迫用戶使用basic auth登錄,內部系統的好方法
2. needlogin_401():裝飾器函數,用於讓視圖先判斷是否需要用戶登錄,如果未登錄就用HTTP 401來強迫用戶登錄
3. settestlogin_401():設置單元測試時所用的basic auth的header
4. checklogin_header:檢查header方式設置登錄的,這對於javascript使用跨域header方式驗證身份很必要
5. setlogin_header:設置登錄header的方式,返回個字元串給客戶端
6. checklogin_cookie:檢查cookie方式是否登錄了,返回登錄信息
7. needlogin_cookie:檢查視圖是否登錄,未登錄則重定向到登錄頁
8. setlogin_cookie:設置cookie為登錄
9. setlogout_cookie:設置cookie注銷
10. logined_cookie:給單元測試提供已經登錄的一個cookie
11. catcherror:裝飾器,用於捕獲視圖的異常,並顯示為出錯頁面
12. load_sqla:應用啟動時,給上下文提供載入資料庫
13. ApiResponse:我自己定義的JSON響應結構,方便構造ajax api
14. dt_to_isotime:把datetime對象轉換為ISOTIME格式字元串
15. dt_to_ts:把datetime對象轉換為timestamp數字
16. BootstrapForm:繼承自webpy的Form的表單,提供了渲染帶有Bootstrap class的支持
所以根據如上分析,一個項目中常用的也就是三種登錄的一種,對應了函數的needlogin、setlogin、setlogout,三個函數。涉及常用資料庫操作、ajax api的也有三個。總計6個函數需要背。
4. model.py:421行數據模型,裡面有十幾行一錘子的引用,標准化程度高,可以在項目之間共用。給每個欄位提供類型的需要背一下相關參數,這樣工作效率會高。典型的欄位類型如VARCHAR、INTEGER、PRIMARYKEY、TIMESTAMP,可以算作是四個函數需要背。同時這里定義了7個表格,背下來對應用的編寫有較大幫助。
5. flaskutil.py:169行。給flask框架用的共享庫。給其他模塊復用的概率大的多。
1. setlogin_cookie:設置cookie方式已登錄
2. setlogout_cookie:設置cookie方式注銷
3. needlogin_cookie_header:用OR方式檢查cookie或header是否包含有效登錄信息
4. setlogin_header:設置登錄過的頭,用以單元測試
5. make_before_request:給每個會話設置資料庫會話
6. teardown_request:在會話結束時清理資料庫資源
7. api_response:提供JSON格式的ajax api響應所需的函數
所以如上可以看到所有這些函數與shareutil有很大重復。這里不再計入需要背的數量。
6. app_api.py:1405行。ajax api的實際實現,使用了webpy框架。這里引用的部分不再重復,反正也是要被放棄的。寫了26個API,他們都是直接被暴露出去,不會被其他模塊調用,所以沒必要背。
7. app_compiler:一個編譯器代理,太窄的方向沒必要分析。
8. app_home.py:361行。主頁和登錄邏輯。主要提取一下Flask框架里常用而值得背的幾個函數:
1. render_template:渲染模板的,很簡單
2. redirect:重定向
3. abort:生成錯誤頁面
4. Response:生成格式可定製的響應
5. g:會話相關的全局變數
所以對於常用Flask框架的,這5個函數就需要特別熟悉。
9. app_mgnt.py:871行。管理後台,也是常見的業務模塊,所以互相之間無依賴,使用到的flask功能也同上,不過這里開始使用Flask的Form,所以需要記住一些常用的欄位類型:TextField、PasswordField、IntegerField、BooleanField、SelectField、TextAreaField,有6個。
10. app_teacher.py:366行。一個業務管理模塊,沒啥新意。

所以根據如上項目的分析可見,需要背下來的函數主要是在項目里需要使用多於1次的。包括框架的功能和自己寫的共享庫等。累計下來一共30個函數或對象。背30個函數可真是沒難度的。

-- 補充 --
web.py的作者去世多年,之後有些人嘗試維護,但維護水平實在不敢恭維。至今在表單缺欄位的處理,單元測試中set-cookie支持等存在缺陷。所以盡管我很喜歡這個框架的思路,但以後不會再用了。

③ 關於python調用pyrouge時的問題求幫忙,我在調用時出現了這個問題怎麼辦

從提示看,match.groups(0) 可能返回一個空tuple, 所以取不到首位。
會不會是 match.group(0)

國際慣例,自己再改改,然後去git commit.

④ 如何在anaconda運行python2和python3 mac

打開terminal,輸入
conda create --name python36 python=3.61

目的是創建一個新的Python 3.6的環境。然後,終端會請求安裝新的包到目錄/Applications/anaconda/envs/python36下,按y同意請求(Anaconda之前選擇裝在了應用程序下,其實Python 3的包就單獨裝在.../envs/下)。

激活Python 3.6
激活新建的Python 3.6環境,輸入
source activate python361

激活後,會發現terminal輸入的地方多了python36的字樣, 再輸入
python --version1

可以看到系統已經成功切換到了Python 3.6的環境。

⑤ python第三方庫安裝到哪裡

1、首先通過pip安裝的第三方庫,一般都在python安裝路徑下的Libsite-packages目錄,這里可以通過pip安裝一個第三方庫看一下,如下圖所示。

⑥ 用python將本地文件上傳到FTP報錯

應該是沒有許可權創建文檔

⑦ python int()數字轉換問題

這個問題的原因是你用的np.zeros(count),它的默認數據類型是float類型的,而且不管你往這個np列表傳入什麼類型的值,它都是自動改為float類型。注意這個float類型可不是原生的浮點類型, 雖然「看」起來差不多, 但如果用type函數的話就能看出來區別了。

有兩種解決方法可以解決你的問題。

  1. list = np.zeros(count) 改為 list = np.zeros(count,dtype=int)。 這樣就不會出現你所說的問題, 但對於你的這段程序用numpy有點大材小用了。 建議你用下面的方法。

  2. list = np.zeros(count) 改為 list = [0 for i in range(count)]

然後第二張圖的錯誤提示正是因為numpy試圖把字元串自動轉換為浮點數,但顯然是不可能的。為了避免這個錯誤就必要用我上面的第二個解決方法才行了。

最後,你的代碼有可優化的空間,太多遍歷和判斷條件了。可能會很長,但可能會對你有一些啟發,如果沒有耐心的話,可以看最後一條就是最終完成的代碼。

  1. slice函數處理邏輯過於復雜了。 你是想把如361變成[3,6,1]這樣的情況吧。那為何不使用list(str(361))呢,雖然最後的結果裡面的元素是字元串類型,但後面直接用int(i)的方式解決了。這樣的話,count函數都可以省略了。

  2. 看到slice函數下面的for遍歷語句,我明白了你的用意,就是為了計算各個位數相加的和,這樣的話,就連slice函數都沒必要了。直接下面代碼就可以了:

foriinstr(n):
sum+=int(i)

3.再繼續,發現又是slice和for循環,原來是要繼續把sum分開。直接list(str(sum))即可。

4.到最後了,我看到了很多條件判斷,總覺得條件判斷這么寫,顯得有點羅嗦了點。可以把你這個條件判斷寫一個類似配置文件的對象,其實就是字典對象。 最終給你總結一下你的代碼就是下面這樣的:

#input直接用字元串類型就夠用了。然後去掉所有import
inputStr=input()
sum=0
#這條賦值語句其實無所謂,但對於理解代碼來說還是很重要的,反正也不影響性能,何樂而不為呢。
result=[]

#下面的是類似配置文件的字典對象
convertDic={'1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu','0':'ling'}

#算出input的各個位相加的和
foriininputStr:
sum+=int(i)

#str也是可迭代的類型,所以通過map和lambda匿名函數把各個值變成相對應的拼音。
result=list(map(lambdax:convertDic[x],str(sum)))
print(result)

#去掉注釋和print語句,這段程序只用了7行,而且理解起來是不是還挺簡單的(除了最後一條)
#我相信你對於上面的語句不是很懂,裡面涉及了兩個看起來「高達上的東西」,但其實就是一種簡寫形式。
#map就是映射,簡單說就是一個循環,就是把每一個元素經過一個函數處理後再返回來的過程。
#lambda是一個匿名函數,沒有函數名,只能有一個表達式,且這個表達式就是返回值。它就是一個精簡版的函數而已。當然,map裡面也可以直接寫已定義好的函數名。
#最後我用比較通俗的代碼給你解釋一下上面那句語句的大致的工作流程。

#定義一個函數,相當於上面的匿名函數.
defconvert(x):
returnconvertDic[x]
#然後遍歷sum,並把每個元素替換成相應的拼音。現在的sum是一個int類型,int類型是不能迭代的或者遍歷的,所以需要把int轉換成str類型。
#這里講一點map和這個循環遍歷的區別,首先map會把已有的元素替換成經過函數處理的值。但這條循環是在一個空的list對象里添加數據,這是區別。當然,也可以寫替換數據的循環,但代碼量不是這2行了,會更多。如果要遍歷的話,這種寫法還是比較推薦的。
foriinstr(sum):
result.append(convert(i))
#result.append(convertDic[x])也可以這樣寫,但為了解釋上面那條語句,所以這條注釋掉當給你的啟發。
#最後print就可以看到結果了,也就是說,我們把4條一句壓縮成了一天語句了。如果還是不了解的話,可以翻翻文檔什麼的,裡面會有一些例子可當參考。
print(result)

⑧ python 安裝 tabula-py

建議你解壓這個壓縮文件,然後查看readme文件,內有安裝方法。你的這種安裝方法錯誤太多,原因缺少支持和兼容問題,可以如下幾種安裝方法:
1)pip install tabula-py;
國內鏡像:pip install -i https://mirrors.aliyun.com/pypi/simple/ tabula-py
2)下載whl文件安裝,版本要和你的python和系統一致。

⑨ Python語言設計天天向上3.2—3.3

ability = 1
b = 1
days = 365
while b <= days:
if b <= 3:
ability = 1
elif b > 3:
ability += ability * 0.01 #4
b = b + 1
print(ability)

days = 365
b = 1
e = 1
c = int((days - 10) / 10) * 6 #從11到360天,每十天只在上十天的結果基礎上只增長6天,從11到360天實際增長了c天
while b <= 10:
#前十天能力增長為ability
if b <= 3:
ability = 1
elif b > 3:
ability += ability * 0.01
b = b + 1
while e <= c:
#從11到360天能力增長結果為ability
ability = ability + ability * 0.01
e = e + 1
#從361到365天能力增長結果為ability
ability += ability * 0.1
print(ability)

⑩ python label.config這個配置用法問題

找不到資料,通常是看源代碼的。 好在python的源代碼有時候比幫助,或者是在網上找的東西更好用。 另外有一個國外寫的書。 tkinter編程,有機會可以下載一本看看,基本上你要的問題都有答案。


下面簡單說一下看源代碼的事情。

在python2.7的lib/lib-tk目錄下有一個ttk.py文件,打開可以看到classLable(Widget)
發現,它初始時調用了一個通用的Widget類,(強大)
classWidget(Tkinter.Widget):
調用了
Tkinter.Widget.__init__
Tkinter里
classWidget(BaseWidget,Pack,Place,Grid):
其中BaseWidget的setup顯示,你可以輸入任何參數,
參數需要是classtype,和DictionaryType,它是動態添加的。所以不保證其一定生效
但是如果它不在conf里,就刪除

這些參數應該用於,widget本身屬性,以及Pack,Place,Grid等類使用

classMisc:
這裡面有所有的參數。太長了。如果你有耐心,可以仔細去看看。
如果有興趣,可以繼續追一下tcl/tcl8.5里的代碼。其中似乎也有所有的configure

順便幫你查找了《python與tkiner編程》這本書。在361和362頁有所有你要的基本參數。太多了,這里就不列表了。

375頁有label特有的選項。包括bgstipple, fgstipple, lmargin1, lmargin2, offset, overstrike, margin, tabs, underline等

標准選項有:backgroud, borderwidth, font, foregroud, justify, relief

你在問題里列的width, height等 應該是屬於Pack, Place, Grid用的。

395頁有大部分控制項共享選項的詳細說明。

53頁有label的簡單使用說明


有這本書,基本上就不用自己看源代碼了。作者是1993年就開始使用python的老手。


另外你還可以使用HELP這個方法 。

>>>fromTkinterimport*
>>>root=Tk()
>>>label=Label(root,text='xiaodeng')
>>>help(label.config)
:

configure(self,cnf=None,**kw)methodofTkinter.Labelinstance
Configureresourcesofawidget.


arguments.Togetanoverviewabout
.

根據help的提 示, 你需要檢查 它的keys

>>>printlabel.keys()
['activebackground','activeforeground','anchor','background','bd','bg','bi
tmap','borderwidth','compound','cursor','disabledforeground','fg','font',
'foreground','height','highlightbackground','highlightcolor','highlightthick
ness','image','justify','padx','pady','relief','state','takefocus','text
','textvariable','underline','width','wraplength']

OK, 上面應該就是你要的答案了。 以後都可以用這個方法來找參數了。

熱點內容
編譯選項立即綁定未定義符號 發布:2025-05-16 20:55:13 瀏覽:905
linuxmysql慢日誌 發布:2025-05-16 20:47:58 瀏覽:270
村兩委有哪些配置 發布:2025-05-16 20:34:47 瀏覽:292
我的世界有什麼伺服器好玩的 發布:2025-05-16 20:28:57 瀏覽:482
c語言按位與運算 發布:2025-05-16 20:24:10 瀏覽:753
蘋果手機如何修改密碼安全 發布:2025-05-16 20:23:34 瀏覽:193
圖片文字識別演算法 發布:2025-05-16 20:21:54 瀏覽:45
校園ftp伺服器 發布:2025-05-16 20:19:38 瀏覽:71
數據加密技術的實現 發布:2025-05-16 20:12:49 瀏覽:158
華為p9擴存儲 發布:2025-05-16 20:03:22 瀏覽:414