# 檔案名稱的陷阱：命名 py 檔請小心

**URL:** https://vip.studycamp.tw/t/%E6%AA%94%E6%A1%88%E5%90%8D%E7%A8%B1%E7%9A%84%E9%99%B7%E9%98%B1%EF%BC%9A%E5%91%BD%E5%90%8D-py-%E6%AA%94%E8%AB%8B%E5%B0%8F%E5%BF%83/7113
**Category:** 底 BUG 大師
**Created:** [2024年四月3日 01:00 UTC](https://vip.studycamp.tw/t/%E6%AA%94%E6%A1%88%E5%90%8D%E7%A8%B1%E7%9A%84%E9%99%B7%E9%98%B1%EF%BC%9A%E5%91%BD%E5%90%8D-py-%E6%AA%94%E8%AB%8B%E5%B0%8F%E5%BF%83/7113 "2024-04-03T01:00:14Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![sky](https://vip.studycamp.tw/user_avatar/vip.studycamp.tw/sky/32/8098_2.png) [@sky](https://vip.studycamp.tw/u/sky)
#### Post date: [2024年四月3日 01:00 UTC](https://vip.studycamp.tw/t/%E6%AA%94%E6%A1%88%E5%90%8D%E7%A8%B1%E7%9A%84%E9%99%B7%E9%98%B1%EF%BC%9A%E5%91%BD%E5%90%8D-py-%E6%AA%94%E8%AB%8B%E5%B0%8F%E5%BF%83/7113/1 "2024-04-03T01:00:15Z")

</div>

## 寫一段加入 Google 行事曆的 code

在準備每週 kobo 99元電子書特價資料時，加入 Google 行事曆的功能蠻好用。

接著我就想到，我們共同學習募集說明會時， **百人響應、幾人到場** 的情形，也許可以用這個方法解決，讓網友在自己的行事曆上設定提醒。

所以 **[【共筆】Line Bot 開發學習資源](https://vip.studycamp.tw/t/topic/7097/1)** 募集說明會，就加了提醒按鈕。

因為這個功能未來可能常會用到，我懶得手動編輯，就請 ChatGPT（或其他類似工具）幫忙。

果然，幾秒鐘就完成了，程式也順利執行無誤。

使用者（就是我啦）輸入 標題、日期、時間和說明文字後（懶得輸入的話，都有預設值），就自動產生 Google Calendar 和 iCal 的 url 連結。

既然沒有問題，那這篇文章在底什麼 BUG？

* * *

## 問題發生在另一隻程式

通常我在上班前和下班後，都會跑一次 udemy 限免課程的爬蟲。

**明明上午還活蹦亂跳的爬蟲，晚上卻出現了奇怪的 BUG。**

只是 import pandas 就有問題，程式 line 4： `import pandas as pd`

```auto
Traceback (most recent call last):
  File "C:\Dev\course\main_sorting.py", line 4, in <module>
    import pandas as pd
  File "C:\Python310\lib\site-packages\pandas\ __init__.py", line 22, in <module>
    from pandas.compat import is_numpy_dev as _is_numpy_dev
  File "C:\Python310\lib\site-packages\pandas\compat\ __init__.py", line 15, in <module>
    from pandas.compat.numpy import (
  File "C:\Python310\lib\site-packages\pandas\compat\numpy\ __init__.py", line 4, in <module>
    from pandas.util.version import Version
  File "C:\Python310\lib\site-packages\pandas\util\ __init__.py", line 1, in <module>
    from pandas.util._decorators import ( # noqa:F401
  File "C:\Python310\lib\site-packages\pandas\util\_decorators.py", line 14, in <module>
    from pandas._libs.properties import cache_readonly # noqa:F401
  File "C:\Python310\lib\site-packages\pandas\_libs\ __init__.py", line 13, in <module>
    from pandas._libs.interval import Interval
  File "pandas\_libs\interval.pyx", line 1, in init pandas._libs.interval
  File "pandas\_libs\hashtable.pyx", line 1, in init pandas._libs.hashtable
  File "pandas\_libs\missing.pyx", line 1, in init pandas._libs.missing
  File "C:\Python310\lib\site-packages\pandas\_libs\tslibs\ __init__.py", line 30, in <module>
    from pandas._libs.tslibs.conversion import (
  File "pandas\_libs\tslibs\conversion.pyx", line 63, in init pandas._libs.tslibs.conversion
  File "pandas\_libs\tslibs\parsing.pyx", line 1, in init pandas._libs.tslibs.parsing
  File "pandas\_libs\tslibs\offsets.pyx", line 1, in init pandas._libs.tslibs.offsets
  File "pandas\_libs\tslibs\timedeltas.pyx", line 61, in init pandas._libs.tslibs.timedeltas
  File "pandas\_libs\tslibs\fields.pyx", line 49, in init pandas._libs.tslibs.fields
  File "pandas\_libs\tslibs\strptime.pyx", line 633, in init pandas._libs.tslibs.strptime
  File "pandas\_libs\tslibs\strptime.pyx", line 538, in pandas._libs.tslibs.strptime.TimeRE. __init__
  File "pandas\_libs\tslibs\strptime.pyx", line 414, in pandas._libs.tslibs.strptime.LocaleTime. __init__
  File "pandas\_libs\tslibs\strptime.pyx", line 434, in pandas._libs.tslibs.strptime.LocaleTime.__calc_weekday
AttributeError: module 'calendar' has no attribute 'day_abbr'

```

什麼錯誤呢？我們看最後兩行，在 `strptime.pyx` line 434，module ‘calendar’ 找不到這個屬性 ‘day\_abbr’。

```auto
File "pandas\_libs\tslibs\strptime.pyx", line 434, in pandas._libs.tslibs.strptime.LocaleTime.__calc_weekday
AttributeError: module 'calendar' has no attribute 'day_abbr'

```

看看 `pandas\_libs\tslibs\strptime.pyx`，我標註了 line 434，問題就出在這裡的 `calendar.day_abbr[i].lower() `：

```diff
    def __calc_weekday(self):
        # Set self.a_weekday and self.f_weekday using the calendar
        # module.
+ a_weekday = [calendar.day_abbr[i].lower() for i in range(7)] ## < line 434
        f_weekday = [calendar.day_name[i].lower() for i in range(7)]
        self.a_weekday = a_weekday
        self.f_weekday = f_weekday

```

等一下， **爬蟲程式又沒有用到 module ‘calendar’** ，我只是拿 pandas 來處理爬回來的課程資料 csv 檔，這樣也不行？

不過這個 module ‘calendar’ 看起來很眼熟，這不就是我白天新增的程式嗎？

看看 `pandas\_libs\tslibs\strptime.pyx` 前面幾行的 import：

```diff
  """Strptime-related classes and functions.
  """
+ import calendar
  import locale
  import re
  import time

```

我大概心裡就有底了，這傢伙…

* * *

## 原因就是我把檔案命名為 calendar.py

我現在已經不常寫程式了，偶爾有在更動的，就是 udemy 限免課程的爬蟲。爬蟲程式經常更動是宿命，因為網站要防爬蟲，也經常在改版。

這些更動常會用到課程相關資料或程式，所以我會把程式放在同樣的路徑。

在測試加入行事曆功能時也不例外，我直接在原本爬蟲程式的路徑中，新增一個 `calendar.py` 檔，然後把 ChatGPT 的程式貼進去測試。

`calendar.py` 可以順利執行，但晚上執行爬蟲程式就出槌了。

雖然

### 1. 爬蟲程式沒用到 `calendar.py`，只是 `import pandas as pd`

### 2. 兩個程式的路徑不同 `calendar.py` & `strptime.pyx`

但就在命運的神秘安排下，產生了量子糾纏（胡扯，哪有！明明就是很初級的 BUG）。

這件事告訴我們（其實只有我）， **不要把檔案命名為常用字，這很可能會造成預期之外的BUG** 。

這時候是不是應該來整理一下，命名時應避開的檔名呢？找時間來整理一下好了。
