- [Python Basic](https://hackmd.io/@YouSheng/HyGyT0-08)
- [Python Function](https://hackmd.io/@YouSheng/HJa_OD1AL)
- [Python I/O](https://hackmd.io/@YouSheng/r14w6AZAL)
- [Python OOP](https://hackmd.io/@YouSheng/ryXzCZFp8)
- [Python - String, Bytes and ByteArray](https://hackmd.io/pV4D7qp1S1qhVcBqI7z9cQ?view)
- [Python Data Structure](https://hackmd.io/@YouSheng/Sk0XvLT9U)
- [Python Advanced](https://hackmd.io/@YouSheng/r16tRWtpI)
- [Python Module](https://hackmd.io/@YouSheng/HkcJo-hvI)
- [How to Generate an .EXE program](https://hackmd.io/@YouSheng/HylwO_PTI)
- [Anaconda & Pip Note](https://hackmd.io/@YouSheng/HyW6AGpoI)
[TOC]
---
## Debugging
### Exception Handling
```python=
# 觸發例外
raise <ExceptionType>
# 處裡例外
try:
<body>
except <ExceptionType1>:
<handler1>
...
except <ExceptionTypeN>:
<handlerN>
except:
<handlerExcept>
# 當前面的except都無法抓到合適的型態時, 執行此區塊
else
<process_else>
# Optional, 當try裡面沒有例外發生時, 執行此區塊
finally:
<process_finally>
# Optional, 定義一些收拾行為, 不管有沒有發生例外, 最後都會執行此區塊
```
#### Traceback Information
> 程式只要發生例外沒有處理,就會顯示Traceback資訊,根據call stack依序顯示錯誤訊息
```python=
def fun1():
return fun2()
def fun2():
return fun3()
def fun3():
raise Exception('This is error message.')
if __name__ == '__main__':
fun1()
```
```python=
# 執行程式後
Traceback (most recent call last):
File "error.py", line 11, in <module>
fun1()
File "error.py", line 2, in fun1
return fun2()
File "error.py", line 5, in fun2
return fun3()
File "error.py", line 8, in fun3
raise Exception('This is error message.')
Exception: This is error message.
# 越早呼叫的function會在最上層
# 最後則是發生例外的型別與錯誤訊息
```
```python=
# 將錯誤訊息存城日誌檔,使用traceback module
import traceback
try:
raise Exception('This is error message.')
except:
error_file = open('errorInfo.txt', 'w')
error_file.write(traceback.format_exc())
error_file.close()
print('The traceback info was written to errorInfo.txt')
```
[Traceback Module](https://docs.python.org/3/library/traceback.html)
### Assertion
Syntax
```python=
assert <condition>, <message>
```
- 使用`assert`檢查是否發生錯誤,這樣的寫法程式可讀性也比較好
- 當`condition`為`Flase`,產生`AssertionError`,顯示`message`
- 執行python時加上 -O 可以停用 Assertion
```python=
def divide(n, d):
assert d > 0, "分母不能為零"
return n/d
if __name__ == '__main__':
divide(1,0)
```
```python=
assert <condition>, <message>
# 等價於
if __debug__:
if not <condition>:
raise AssertError(<message>)
```
### Logging Module
[logging module](https://docs.python.org/3/library/logging.html)
{"metaMigratedAt":"2023-06-15T04:05:26.535Z","metaMigratedFrom":"YAML","title":"Python TOC","breaks":false,"contributors":"[{\"id\":\"1f2b80c1-45b3-40e0-be40-4c3f86095da8\",\"add\":36573,\"del\":33966}]"}