teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/11/23 09:00

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -21,4 +21,45 @@
21
21
  self.isSorted = False
22
22
  > ```
23
23
 
24
- 片やgradeで、片やgradesだからです。統一してください。
24
+ 片やgradeで、片やgradesだからです。統一してください。
25
+
26
+ ---
27
+ また、次の部分ですが...
28
+ > ```Python
29
+ class Grades(object)
30
+ ...
31
+ def addGrade(self, student, grade):
32
+ """gradeをfloat型とする
33
+ gradeをstudentの成績リストへ追加する"""
34
+ try:
35
+ self.grades[student.getIdNum()].append(grade)
36
+ except:
37
+ raise ValueError('Student not in mapping')
38
+ > ```
39
+
40
+ try-exceptが物凄く気になります。
41
+ 例外は確かに強力ですが、この用法だと自らの首を絞めます。
42
+ ```Python
43
+ >>> try:
44
+ ... haoigheowahfawfa
45
+ ... except:
46
+ ... pass
47
+ ...
48
+ >>> # こんなコードでもエラーが出ないで通ってしまう
49
+ ```
50
+
51
+ しっかりと用法を把握するまでは、できるだけif文で対処した方が良いです。
52
+ 例外を用いるにしても、せめて例外オブジェクトの種類を限定してください。
53
+ ```Python
54
+ class Grades(object)
55
+ ...
56
+ def addGrade(self, student, grade):
57
+ """gradeをfloat型とする
58
+ gradeをstudentの成績リストへ追加する"""
59
+ try:
60
+ self.grades[student.getIdNum()].append(grade)
61
+ except KeyError:
62
+ raise ValueError('Student not in mapping')
63
+ ```
64
+
65
+ これなら幾分かマシです。

1

修正

2018/11/23 09:00

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -11,13 +11,14 @@
11
11
  > ```Python
12
12
  class Grades(object)
13
13
  ...
14
- def addGrade(self, student, grade):
14
+ def addStudent(self, student):
15
- """gradefloat型とする
15
+ """studentStudent型とする
16
- gradeをstudent成績リストへ追加する"""
16
+ student成績ブックへ追加する"""
17
+ if student in self.students: #AttributeError
18
+ raise ValueError('Duplicate student') #重複した生徒
17
- try:
19
+ self.students.append(student)
18
- self.grades[student.getIdNum()].append(grade)
20
+ self.grades[student.getIdNum()] = []
19
- except:
20
- raise ValueError('Student not in mapping')
21
+ self.isSorted = False
21
22
  > ```
22
23
 
23
24
  片やgradeで、片やgradesだからです。統一してください。